postgresql посмотреть какие внешние ключи ссылаются на таблицу
В oracle all_constraints можно по r_constraint_name можно сделать запрос, чтобы он выводил от каких таблиц зависит нужная таблица А в postgesql information_schema.table_constraints, pg_catalog.pg_constraint и других такой инфы нет
Ответы (1 шт):
Команда \d tablename в psql покажет и FK с этой таблицы на другие, и, отдельно, FK с других таблиц на эту.
А раз psql это умеет показывать - значит, как любой клиент, это может откуда-то прочитать из ббазы. Если запустить psql -E то можно увидеть производимые запросы. В частности (на моей 13 версии для таблички с oid=418144):
SELECT true as sametable, conname,
pg_catalog.pg_get_constraintdef(r.oid, true) as condef,
conrelid::pg_catalog.regclass AS ontable
FROM pg_catalog.pg_constraint r
WHERE r.conrelid = '418144' AND r.contype = 'f'
AND conparentid = 0
ORDER BY conname
FK на этой таблице.
SELECT conname, conrelid::pg_catalog.regclass AS ontable,
pg_catalog.pg_get_constraintdef(oid, true) AS condef
FROM pg_catalog.pg_constraint c
WHERE confrelid IN (SELECT pg_catalog.pg_partition_ancestors('418144')
UNION ALL VALUES ('418144'::pg_catalog.regclass))
AND contype = 'f' AND conparentid = 0
ORDER BY conname;
FK ссылающиеся на эту таблицу.
Числовой OID можно без потери смысла запроса заменить на your_tablename::pg_catalog.regclass, тогда СУБД самостоятельно преобразует в OID.
А в postgresql information_schema.table_constraints, pg_catalog.pg_constraint и других такой инфы нет
Вы не правы: pg_constraint.confrelid относится именно к FK.
А в определённой стандартом information_schema внешние ключи показывает не table_constraints, а специальная referential_constraints. Из которой можно вытащить unique_constraint_name - имя уникального ограничения или первичного ключа, по которому уже найти таблицу, на которую ссылается этот FK.