これを別の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
マニュアルで。また、オブジェクト識別子の種類についても詳しく説明します。
関連:
- 名前が不明なPostgreSQLドロップ制約
- すべてのPKとFKを取得する