Jika Anda tidak memerlukan ini untuk dibawa ke RDBMS lain, ini banyak lebih cepat dan lebih mudah menggunakan tabel katalog di pg_catalog
alih-alih skema informasi standar:
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;
Pengembalian:
referenced_table | fk_name | fk_definition
------------------+-------------------------+----------------------------------------------
Schema1.TableA | b1_fkey | FOREIGN KEY ("B_id") REFERENCES "Schema1"."TableA"("A_id")
Catatan
-
Dua kolom tambahan hanya untuk orientasi. Menurut Q Anda, Anda hanya membutuhkan kolom pertama.
-
Ini mengembalikan semua tabel yang direferensikan oleh semua kunci asing yang melibatkan nama kolom yang diberikan - termasuk batasan FK pada banyak kolom.
-
Nama secara otomatis memenuhi syarat skema atau tidak sesuai dengan visibilitas yang disetel oleh
search_path
saat ini . Nama juga diloloskan jika diperlukan (karakter ilegal atau huruf besar, kata-kata yang dicadangkan, ...) secara otomatis juga.
Lihat detail pg_constraint
dan pg_attribute
dalam manual. Dan lebih banyak lagi tentang tipe pengenal objek juga.
Terkait:
- Batasan pelepasan PostgreSQL dengan nama tidak dikenal
- Mengambil semua PK dan FK