Есть ли способ использовать SQL для отображения всех внешних ключей для данной таблицы? Я знаю имя таблицы / схему, и я могу подключить это.
sql
postgresql
smack0007
источник
источник
Ответы:
Вы можете сделать это через таблицы information_schema. Например:
источник
FROM information_schema.table_constraints AS tc JOIN information_schema.key_column_usage AS kcu USING (constraint_schema, constraint_name) JOIN information_schema.constraint_column_usage AS ccu USING (constraint_schema, constraint_name)
PSQL делает это, и если вы запускаете PSQL с:
он покажет вам, какой запрос выполняется. В случае поиска внешних ключей это:
В данном случае 16485 - это oid таблицы, на которую я смотрю - вы можете получить ее, просто приведя свое имя таблицы к классу переклассификации следующим образом:
Укажите имя таблицы, если оно не уникальное (или первое в вашей таблице
search_path
):источник
SELECT conname, pg_catalog.pg_get_constraintdef(r.oid, true) as condef FROM pg_catalog.pg_constraint r WHERE r.confrelid = 'myschema.mytable'::regclass;
psql -E -U username -d database ThenWHAT
?Проблема
\d+ tablename
в приглашении PostgreSQL, помимо отображения типов данных столбца таблицы, он покажет индексы и внешние ключи.источник
Ответ Оллика хорош, так как он не специфичен для Postgres, однако он ломается, когда внешний ключ ссылается более чем на один столбец. Следующий запрос работает для произвольного числа столбцов, но он сильно зависит от расширений Postgres:
источник
Дополнение к рецепту оллика:
Затем:
SELECT * FROM foreign_keys_view WHERE table_name='YourTableNameHere'
;источник
проверьте ff сообщение для вашего решения и не забудьте отметить это, когда вы штрафуете это полезно
http://errorbank.blogspot.com/2011/03/list-all-foreign-keys-references-for.html
источник
Этот запрос корректно работает с составными ключами также:
источник
Я думаю, что вы искали и очень близко к тому, что написал @ollyc, это:
Это перечислит все таблицы, которые используют вашу указанную таблицу в качестве внешнего ключа
источник
короткий, но приятный отзыв, если он работает на вас.
источник
Ни один из существующих ответов не дал мне результатов в том виде, в котором я на самом деле хотел их получить. Итак, вот мой (гигантский) запрос для поиска информации о внешних ключах.
Несколько заметок:
from_cols
иto_cols
могут быть значительно упрощены в Postgres 9.4 и более поздних версиях.WITH ORDINALITY
вместо оконного функции, используя повозка , запряженная волами я использую.UNNEST
. Я не думаю, что это произойдет, но у меня нет внешних ключей из нескольких столбцов в моем наборе данных для тестирования. Добавление 9.4 тонкостей полностью исключает эту возможность.ORDER BY
в агрегатных функциях)STRING_AGG
на,ARRAY_AGG
если вы хотите массив столбцов, а не разделенную запятыми строку.-
источник
Еще один способ:
источник
Вы можете использовать системные каталоги PostgreSQL . Может быть, вы можете запросить pg_constraint запросить внешние ключи. Вы также можете использовать информационную схему
источник
Используйте имя Первичного Ключа, на которое ссылаются Ключи, и запросите информационную схему:
Здесь TABLE_NAME_pkey - это имя первичного ключа, на который ссылаются внешние ключи.
источник
Вот решение от Andreas Joseph Krogh из списка рассылки PostgreSQL: http://www.postgresql.org/message-id/200811072134.44750.andreak@officenet.no
Это решение обрабатывает внешние ключи, которые ссылаются на несколько столбцов, и избегает дубликатов (что некоторые другие ответы не могут сделать). Единственное, что я изменил, это имена переменных.
Вот пример, который возвращает все
employee
столбцы, которые ссылаются наpermission
таблицу:источник
Чтобы расширить превосходный ответ Мартина, вот запрос, который позволяет вам фильтровать на основе родительской таблицы и отображать имя дочерней таблицы с каждой родительской таблицей, чтобы вы могли видеть все зависимые таблицы / столбцы на основе ограничений внешнего ключа в родительская таблица.
источник
Правильное решение проблемы, используя
information_schema
работу с несколькими столбцами ключей, правильное объединение столбцов с разными именами в обеих таблицах, а также совместимость с ms sqlsever:Примечание. Существуют некоторые различия между реализациями potgresql и sqlserver, из-за
information_schema
которых верхний ответ дает разные результаты в двух системах - одна показывает имена столбцов для таблицы внешнего ключа, другая - для таблицы первичного ключа. По этой причине я решил вместо этого использовать вид KEY_COLUMN_USAGE.источник
ORDINAL_POSITION
может привести к неверному результату, если порядок столбцов во внешнем ключе отличается от порядка столбцов в уникальном ограничении. Я полагаю, что вы должны были присоединиться кkcu_foreign.POSITION_IN_UNIQUE_CONSTRAINT = kcu_primary.ORDINAL_POSITION
Update : Кроме того, внешний ключ может зависеть и от УНИКАЛЬНОГО ограничения, поэтому я думаю, что вы должны удалитьpks.CONSTRAINT_TYPE
условие и просто присоединитьсяrc
к немуkcu_primary
напрямуюисточник
Я написал решение, которое нравится и часто используется. Код находится по адресу http://code.google.com/p/pgutils/ . Смотрите представление pgutils.foreign_keys.
К сожалению, вывод слишком многословный, чтобы включить его здесь. Однако вы можете попробовать это в общедоступной версии базы данных здесь, например так:
Это работает с 8.3 по крайней мере. Я ожидаю обновления в случае необходимости в ближайшие несколько месяцев.
-Reece
источник
Я создал небольшой инструмент для запроса, а затем сравнил схему базы данных: Dump PostgreSQL db schema to text
Есть информация о ФК, но в ответе оллика более подробно.
источник
Примечание. Не забывайте порядок столбцов при чтении столбцов ограничений!
источник
Это то, что я сейчас использую, в нем будет показана таблица и ограничения fkey [удалите таблицу, и в ней будут перечислены все таблицы в текущем каталоге]:
источник
самый быстрый, чтобы проверить прямой ответ Bash, основанный исключительно на этом ответе
источник