Вы можете запросить одно из представлений information_schema, чтобы узнать, существует ли ограничение этого имени.
select constraint_name
from information_schema.referential_constraints
where constraint_name = 'omrid_tellkanne_fkey';
Независимо от того, работает ли оно надежно, зависит от приложения. Хотя этот будет достоверно рассказать вам, существует ли ограничение внешнего ключа с именем «omrid_tellkanne_fkey», он не скажет вам, является ли это ограничение внешним ограничением между интересующими вас таблицами. Вам понадобится присоединиться к одной или двум таблицам из представлений information_schema, чтобы получить это.
Более общий запрос может выглядеть следующим образом.
select k.table_catalog || '.' ||
k.table_schema || '.' ||
k.table_name referencing_table,
r.constraint_name,
c.table_catalog || '.' ||
c.table_schema || '.' ||
c.table_name referenced_table
from information_schema.referential_constraints r
inner join information_schema.key_column_usage k
on r.constraint_catalog = k.constraint_catalog
and r.constraint_schema = k.constraint_schema
and r.constraint_name = k.constraint_name
inner join information_schema.constraint_column_usage c
on r.constraint_catalog = c.constraint_catalog
and r.constraint_schema = c.constraint_schema
and r.constraint_name = c.constraint_name
-- Change this WHERE clause to match your object names.
where r.constraint_catalog = 'your_database'
and r.constraint_schema = 'your_schema'
and r.constraint_name = 'omrid_tellkanne_fkey'
and k.table_name = 'omrid'
and c.table_name = 'dok';
Было бы легче понять ваш вопрос, если вы добавите свои таблицы DDL. – Houari
Как часто вам нужно добавить ограничение внешнего ключа? –
Мне нужно добавить его во время обновления приложения. Если новая версия установлена на клиентский сайт, выполняется сценарий обновления. Это происходит 1,30 раза в год – Andrus