Ако не ви е необходимо това да бъде преносимо към друга RDBMS, това е много по-бързо и по-лесно да използвате каталожните таблици в pg_catalog
вместо стандартната информационна схема:
SELECT c.confrelid::regclass::text AS referenced_table
, c.conname AS fk_name
, pg_get_constraintdef(c.oid) AS fk_definition
FROM pg_attribute a
JOIN pg_constraint c ON (c.conrelid, c.conkey[1]) = (a.attrelid, a.attnum)
WHERE a.attrelid = '"Schema2"."TableB"'::regclass -- table name
AND a.attname = 'A_Id' -- column name
AND c.contype = 'f'
ORDER BY conrelid::regclass::text, contype DESC;
Връща:
referenced_table | fk_name | fk_definition
------------------+-------------------------+----------------------------------------------
Schema1.TableA | b1_fkey | FOREIGN KEY ("B_id") REFERENCES "Schema1"."TableA"("A_id")
Бележки
-
Допълнителните две колони са само за ориентация. Според вашия Q, имате нужда само от първата колона.
-
Това връща всички реферирани таблици от всички външни ключове, включващи даденото име на колона - включително FK ограничения за множество колони.
-
Името автоматично се квалифицира за схема или не според видимостта, зададена от текущия
search_path
. Името също се екранира, където е необходимо (незаконни или главни букви, запазени думи, ...) също автоматично.
Вижте подробности за pg_constraint
и pg_attribute
в ръководството. И повече за типовете идентификатори на обекти.
Свързано:
- Ограничение за изпускане на PostgreSQL с неизвестно име
- Извличане на всички PK и FK