Merge pull request #7959 from nineinchnick/7958-pgsql-schema-older-versions

fix fetching pgsql constraints for older server versions
This commit is contained in:
Alexander Makarov
2015-04-02 13:49:54 +03:00

View File

@ -213,14 +213,15 @@ select
fns.nspname as foreign_table_schema, fns.nspname as foreign_table_schema,
fa.attname as foreign_column_name fa.attname as foreign_column_name
from from
pg_constraint ct (SELECT ct.conrelid, ct.confrelid, ct.conkey, ct.contype, ct.confkey, generate_subscripts(ct.conkey, 1) AS s
inner join generate_subscripts(ct.conkey, 1) as s on 1=1 FROM pg_constraint ct
) AS ct
inner join pg_class c on c.oid=ct.conrelid inner join pg_class c on c.oid=ct.conrelid
inner join pg_namespace ns on c.relnamespace=ns.oid inner join pg_namespace ns on c.relnamespace=ns.oid
inner join pg_attribute a on a.attrelid=ct.conrelid and a.attnum = ct.conkey[s] inner join pg_attribute a on a.attrelid=ct.conrelid and a.attnum = ct.conkey[ct.s]
left join pg_class fc on fc.oid=ct.confrelid left join pg_class fc on fc.oid=ct.confrelid
left join pg_namespace fns on fc.relnamespace=fns.oid left join pg_namespace fns on fc.relnamespace=fns.oid
left join pg_attribute fa on fa.attrelid=ct.confrelid and fa.attnum = ct.confkey[s] left join pg_attribute fa on fa.attrelid=ct.confrelid and fa.attnum = ct.confkey[ct.s]
where where
ct.contype='f' ct.contype='f'
and c.relname={$tableName} and c.relname={$tableName}
@ -258,7 +259,10 @@ SQL;
SELECT SELECT
i.relname as indexname, i.relname as indexname,
pg_get_indexdef(idx.indexrelid, k + 1, TRUE) AS columnname pg_get_indexdef(idx.indexrelid, k + 1, TRUE) AS columnname
FROM pg_index idx FROM (
SELECT *, generate_subscripts(indkey, 1) AS k
FROM pg_index
) idx
INNER JOIN generate_subscripts(idx.indkey, 1) AS k ON 1=1 INNER JOIN generate_subscripts(idx.indkey, 1) AS k ON 1=1
INNER JOIN pg_class i ON i.oid = idx.indexrelid INNER JOIN pg_class i ON i.oid = idx.indexrelid
INNER JOIN pg_class c ON c.oid = idx.indrelid INNER JOIN pg_class c ON c.oid = idx.indrelid