Se non hai bisogno che questo sia portabile su un altro RDBMS, è molto più veloce e più semplice utilizzare le tabelle del catalogo in pg_catalog
invece dello schema informativo standard:
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;
Resi:
referenced_table | fk_name | fk_definition
------------------+-------------------------+----------------------------------------------
Schema1.TableA | b1_fkey | FOREIGN KEY ("B_id") REFERENCES "Schema1"."TableA"("A_id")
Note
-
Le due colonne aggiuntive sono solo di orientamento. Secondo la tua Q, hai solo bisogno della prima colonna.
-
Questo restituisce tutto tabelle referenziate da tutte le chiavi esterne che coinvolgono il nome di colonna specificato, inclusi i vincoli FK su più colonne.
-
Il nome viene qualificato automaticamente dallo schema o meno in base alla visibilità impostata dal
search_path
corrente . Anche il nome viene evitato dove necessario (caratteri illegali o maiuscoli, parole riservate, ...).
Controlla i dettagli di pg_constraint
e pg_attribute
nel manuale. E anche di più sui tipi di identificatori di oggetti.
Correlati:
- vincolo di rilascio PostgreSQL con nome sconosciuto
- Recupero di tutti i PK e FK