sql >> Base de Datos >  >> RDS >> PostgreSQL

Encuentre el nombre de la tabla a la que se hace referencia usando el nombre de la tabla, el campo y el esquema

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