Si vous n'avez pas besoin que cela soit portable vers un autre RDBMS, c'est beaucoup utilisation plus rapide et plus simple des tables de catalogue dans pg_catalog
au lieu du schéma d'information 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;
Renvoie :
referenced_table | fk_name | fk_definition
------------------+-------------------------+----------------------------------------------
Schema1.TableA | b1_fkey | FOREIGN KEY ("B_id") REFERENCES "Schema1"."TableA"("A_id")
Remarques
-
Les deux colonnes supplémentaires servent uniquement à l'orientation. Selon votre Q, vous n'avez besoin que de la première colonne.
-
Cela renvoie tous tables référencées par toutes les clés étrangères impliquant le nom de colonne donné - y compris les contraintes FK sur plusieurs colonnes.
-
Le nom est automatiquement qualifié de schéma ou non selon la visibilité définie par le
search_path
courant . Le nom est également échappé si nécessaire (caractères illégaux ou majuscules, mots réservés, ...) automatiquement aussi.
Consultez les détails de pg_constraint
et pg_attribute
dans le manuel. Et plus sur les types d'identificateurs d'objets également.
Connexe :
- Contrainte de suppression PostgreSQL avec un nom inconnu
- Récupération de tous les PK et FK