如果您不需要将其移植到另一个 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
的详细信息。还有更多关于对象标识符类型的信息。
有关的: