postgresql получить список отключенных внешних ключей
Всем привет! Собственно как поучить список всех отключенных внешних ключей по всем таблицам?
К примеру в MSSQL это делается так:
select * from sys.foreign_keys where is_disabled=1
Ответы (2 шт):
В 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