Hvis du ikke har brug for dette for at kunne overføres til et andet RDBMS, er det meget hurtigere og enklere at bruge katalogtabellerne i pg_catalog
i stedet for standardinformationsskemaet:
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;
Returnerer:
referenced_table | fk_name | fk_definition
------------------+-------------------------+----------------------------------------------
Schema1.TableA | b1_fkey | FOREIGN KEY ("B_id") REFERENCES "Schema1"."TableA"("A_id")
Bemærkninger
-
De yderligere to kolonner er kun til orientering. Ifølge dit Q behøver du kun den første kolonne.
-
Dette returnerer alt refererede tabeller af alle fremmednøgler, der involverer det givne kolonnenavn - inklusive FK-begrænsninger på flere kolonner.
-
Navnet er automatisk skemakvalificeret eller ej i henhold til den synlighed, der er angivet af den aktuelle
search_path
. Navnet escapes også automatisk, hvor det er nødvendigt (ulovlige eller store bogstaver, reserverede ord, ...).
Se detaljer om pg_constraint
og pg_attribute
i manualen. Og også mere om objektidentifikatortyper.
Relateret:
- PostgreSQL drop-begrænsning med ukendt navn
- Henter alle PK og FK