postgresql получить список отключенных внешних ключей

Всем привет! Собственно как поучить список всех отключенных внешних ключей по всем таблицам? К примеру в MSSQL это делается так: select * from sys.foreign_keys where is_disabled=1


Ответы (2 шт):

Автор решения: Max Watson

В Postgresql можно получить список отключенных внешних ключей для всех таблиц, используя системный каталог информации pg_constraint

SELECT conname, conrelid::regclass, confrelid::regclass
FROM pg_constraint
WHERE contype = 'f' AND convalidated = false;

Этот запрос выбирает имя внешнего ключа (conname), имя таблицы, содержащей внешний ключ (conrelid::regclass), и имя связанной таблицы (confrelid::regclass) для всех внешних ключей (contype = 'f') в базе данных, которые не прошли проверку на соответствие (convalidated = false), то есть являются отключенными.

→ Ссылка
Автор решения: Мелкий

В postgresql нет понятия отключенного foreign key. Foreign key или есть или его нет.


Технически, суперпользователь может обойти исполнение FK, отключив выполнение системных триггеров: из-за того, что foreign key на уровне реализации в postgresql обеспечивается набором системных триггеров. Это может быть сделано через ALTER TABLE для таблицы (смотрите возможные состояния pg_trigger.tgenabled) либо настройкой сессии session_replication_role

→ Ссылка