Om du inte behöver detta för att vara portabelt till ett annat RDBMS är det mycket snabbare och enklare att använda katalogtabellerna i pg_catalog
istället för standardinformationsschemat:
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;
Returnerar:
referenced_table | fk_name | fk_definition
------------------+-------------------------+----------------------------------------------
Schema1.TableA | b1_fkey | FOREIGN KEY ("B_id") REFERENCES "Schema1"."TableA"("A_id")
Anteckningar
-
De ytterligare två kolumnerna är endast för orientering. Enligt din Q behöver du bara den första kolumnen.
-
Detta returnerar alla refererade tabeller av alla främmande nycklar som involverar det givna kolumnnamnet - inklusive FK-begränsningar på flera kolumner.
-
Namnet är automatiskt schemakvalificerat eller inte enligt synligheten som ställts in av den aktuella
search_path
. Namnet escapes också vid behov (olagliga eller versaler, reserverade ord, ...) också automatiskt.
Kolla in information om pg_constraint
och pg_attribute
i manualen. Och mer om objektidentifieringstyper också.
Relaterat:
- PostgreSQL-släppbegränsning med okänt namn
- Hämtar alla PK och FK