Пост-ГРЭС: SQL для списка внешних ключей таблицы

Обычная практика использует @class в заголовочных файлах (но Вам все еще нужен к #import суперкласс), и #import в файлах реализации. Это избежит любых круговых включений, и это просто работает.

191
задан smack0007 19 July 2009 в 21:14
поделиться

4 ответа

Это можно сделать с помощью таблиц information_schema. Например:

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='mytable';
331
ответ дан 23 November 2019 в 05:32
поделиться

Я создал небольшой инструмент для запроса и последующего сравнения схемы базы данных: Выгрузить схему базы данных PostgreSQL в текст

Есть информация о FK, но ответ ollyc дает более подробную информацию.

1
ответ дан 23 November 2019 в 05:32
поделиться

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

5
ответ дан 23 November 2019 в 05:32
поделиться

psql делает это, и если вы запустите psql с:

psql -E

, он покажет вам, какой именно запрос выполняется. В случае поиска внешних ключей это:

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

В данном случае 16485 - это oid таблицы, которую я просматриваю - вы можете получить его, просто приведя имя вашей таблицы к regclass, например:

WHERE r.conrelid = 'mytable'::regclass

Schema-qualify имя таблицы, если оно не уникальное (или первое в вашем search_path ):

WHERE r.conrelid = 'myschema.mytable'::regclass
64
ответ дан 23 November 2019 в 05:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: