これを別の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")
ノート
追加の2つの列は、方向付け専用です。あなたのQによると、あなたは最初の列だけが必要です。
これにより、指定された列名に関連するすべての外部キーによって参照されるすべてのテーブルが返されます。これには、複数の列に対するFK制約が含まれます。
名前は、現在のによって設定された可視性に応じて、自動的にスキーマ修飾されるかどうかになりsearch_path
ます。名前も必要に応じて自動的にエスケープされます(不正または大文字、予約語など)。
マニュアルの詳細pg_constraint
を確認してください。また、オブジェクト識別子の種類pg_attribute
についても詳しく説明します。
関連している: