PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Finden Sie den referenzierten Tabellennamen anhand des Tabellen-, Feld- und Schemanamens

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