Si no necesita que esto sea portátil a otro RDBMS, es mucho más rápido y sencillo de usar las tablas de catálogo en pg_catalog
en lugar del esquema de información estándar:
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;
Devoluciones:
referenced_table | fk_name | fk_definition
------------------+-------------------------+----------------------------------------------
Schema1.TableA | b1_fkey | FOREIGN KEY ("B_id") REFERENCES "Schema1"."TableA"("A_id")
Notas
-
Las dos columnas adicionales son solo orientativas. De acuerdo con su Q, solo necesita la primera columna.
-
Esto devuelve todos tablas referenciadas por todas las claves externas que involucran el nombre de columna dado, incluidas las restricciones FK en varias columnas.
-
El nombre se califica automáticamente según el esquema o no según la visibilidad establecida por la
search_path
actual . El nombre también se escapa cuando es necesario (caracteres ilegales o en mayúsculas, palabras reservadas, ...) también automáticamente.
Consulte los detalles de pg_constraint
y pg_attribute
en el manual Y más sobre los tipos de identificadores de objetos también.
Relacionado:
- Restricción de eliminación de PostgreSQL con nombre desconocido
- Recuperación de todos los PK y FK