sql >> Database >  >> RDS >> PostgreSQL

Zoek de tabelnaam waarnaar wordt verwezen met behulp van tabel-, veld- en schemanaam

Als je dit niet nodig hebt om overdraagbaar te zijn naar een ander RDBMS, is het veel sneller en eenvoudiger om de catalogustabellen in pg_catalog te gebruiken in plaats van het standaard informatieschema:

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;

Retourneren:

 referenced_table | fk_name  |  fk_definition
------------------+-------------------------+----------------------------------------------
 Schema1.TableA   | b1_fkey  | FOREIGN KEY ("B_id") REFERENCES "Schema1"."TableA"("A_id")

Opmerkingen

  • De extra twee kolommen zijn alleen ter oriëntatie. Volgens uw Q heeft u alleen de eerste kolom nodig.

  • Dit retourneert alle tabellen waarnaar wordt verwezen door alle externe sleutels met betrekking tot de gegeven kolomnaam - inclusief FK-beperkingen voor meerdere kolommen.

  • De naam wordt automatisch schema-gekwalificeerd of niet volgens de zichtbaarheid die is ingesteld door het huidige search_path . De naam wordt ook automatisch ontsnapt waar nodig (illegale of hoofdletters, gereserveerde woorden, ...).

Bekijk details van pg_constraint en pg_attribute in de handleiding. En ook meer over typen object-ID's.

Gerelateerd:

  • PostgreSQL-verwijderingsbeperking met onbekende naam
  • Alle PK en FK ophalen



  1. GROUP_CONCAT() Functie in MySQL

  2. Hoe commentaar te geven in SQL

  3. Entity Framework 6 met Npgsql

  4. NULL in MySQL (prestaties en opslag)