Als je dit niet nodig hebt om overdraagbaar te zijn naar een ander RDBMS, is het veel sneller en eenvoudiger om de catalogustabellen in pg_catalog
te gebruiken in plaats van het standaard informatieschema:
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;
Retourneren:
referenced_table | fk_name | fk_definition
------------------+-------------------------+----------------------------------------------
Schema1.TableA | b1_fkey | FOREIGN KEY ("B_id") REFERENCES "Schema1"."TableA"("A_id")
Opmerkingen
-
De extra twee kolommen zijn alleen ter oriëntatie. Volgens uw Q heeft u alleen de eerste kolom nodig.
-
Dit retourneert alle tabellen waarnaar wordt verwezen door alle externe sleutels met betrekking tot de gegeven kolomnaam - inclusief FK-beperkingen voor meerdere kolommen.
-
De naam wordt automatisch schema-gekwalificeerd of niet volgens de zichtbaarheid die is ingesteld door het huidige
search_path
. De naam wordt ook automatisch ontsnapt waar nodig (illegale of hoofdletters, gereserveerde woorden, ...).
Bekijk details van pg_constraint
en pg_attribute
in de handleiding. En ook meer over typen object-ID's.
Gerelateerd:
- PostgreSQL-verwijderingsbeperking met onbekende naam
- Alle PK en FK ophalen