Wenn Sie dies nicht brauchen, um auf ein anderes RDBMS portierbar zu sein, ist es viel schnellere und einfachere Verwendung der Katalogtabellen in pg_catalog
anstelle des Standard-Informationsschemas:
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;
Rückgabe:
referenced_table | fk_name | fk_definition
------------------+-------------------------+----------------------------------------------
Schema1.TableA | b1_fkey | FOREIGN KEY ("B_id") REFERENCES "Schema1"."TableA"("A_id")
Notizen
-
Die zusätzlichen zwei Spalten dienen nur der Orientierung. Laut Ihrem Q brauchen Sie nur die erste Spalte.
-
Dies gibt alle zurück referenzierte Tabellen durch alle Fremdschlüssel, die den angegebenen Spaltennamen betreffen - einschließlich FK-Einschränkungen für mehrere Spalten.
-
Der Name wird automatisch schemaqualifiziert oder nicht gemäß der durch den aktuellen
search_path
festgelegten Sichtbarkeit . Der Name wird bei Bedarf auch automatisch maskiert (unzulässige oder Großbuchstaben, reservierte Wörter, ...).
Sehen Sie sich die Details von pg_constraint
an und pg_attribute
im Handbuch. Und auch mehr über Objektbezeichnertypen.
Verwandte:
- PostgreSQL-Drop-Constraint mit unbekanntem Namen
- Alle PK und FK abrufen