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

Рейтинг: 0Ответов: 2Опубликовано: 10.03.2023

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

UPD: Решение https://stackoverflow.com/questions/75718314/postgresql-get-list-of-disabled-foreign-keys

Ответы

▲ 1

В 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), то есть являются отключенными.

▲ 1

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


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