sql >> Database teknologi >  >> RDS >> PostgreSQL

Find det refererede tabelnavn ved hjælp af tabel-, felt- og skemanavn

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



  1. Oracle, Gør datoens første dag i måneden

  2. TreeView-kontrol med underformularer

  3. Sådan viser du alle Oracle-databaseprivilegier for en bruger

  4. Sådan gulvnumre i SQL