можем ли мы напечатать все имена таблиц, которые ссылаются на одну таблицу через внешний ключ в psql - PullRequest
0 голосов
/ 14 февраля 2020

можем ли мы напечатать все имена таблиц, которые ссылаются на одну таблицу через внешний ключ в psql

1 Ответ

0 голосов
/ 14 февраля 2020

Как указано здесь: { ссылка }

SELECT conname,
  pg_catalog.pg_get_constraintdef(r.oid, true) as condef
FROM pg_catalog.pg_constraint r
WHERE r.conrelid = 'Table_Name'::regclass AND r.contype = 'f' ORDER BY 1

Заменив Table_Name на имя таблицы, которую вы хотите проверить, вы получите иностранный ключи и соответствующие ссылки.

Если вы хотите напечатать фактические имена ссылочных таблиц, вам потребуется более сложный запрос, как указано здесь: { ссылка }

SELECT
    tc.table_schema, 
    tc.constraint_name, 
    tc.table_name, 
    kcu.column_name, 
    ccu.table_schema AS foreign_table_schema,
    ccu.table_name AS foreign_table_name,
    ccu.column_name AS foreign_column_name 
FROM 
    information_schema.table_constraints AS tc 
    JOIN information_schema.key_column_usage AS kcu
      ON tc.constraint_name = kcu.constraint_name
      AND tc.table_schema = kcu.table_schema
    JOIN information_schema.constraint_column_usage AS ccu
      ON ccu.constraint_name = tc.constraint_name
      AND ccu.table_schema = tc.table_schema
WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_name='Table_Name';

Заменив Table_Name на имя таблицы, которую вы хотите исследовать, вы получите внешние ключи и связанные ссылки, а фактические имена таблиц будут в foreign_table_name столбец.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...