Vous avez besoin des données dans pg_constraint
qui est un tableau assez compliqué qui gère toutes les contraintes, y compris les contraintes de vérification et les clés étrangères. Heureusement, ce que vous voulez est assez simple.
Pour obtenir la liste de toutes les tables faisant référence à la table foo
vous pouvez faire quelque chose comme :
SELECT conrelid
FROM pg_constraint
WHERE confrelid = <the relid for foo>;
Vous obtiendrez ainsi une liste de liens de table. Mais vous n'avez probablement pas envie de vous occuper de relids, alors rendons les choses un peu plus compliquées :
SELECT r.schemaname || '.' || r.relname
FROM pg_stat_user_tables r, pg_constraint c, pg_stat_user_tables s
WHERE
s.relid = c.confrelid AND
c.conrelid = r.relid AND
s.relname = 'foo';
Cela renvoie une liste que vous pouvez ensuite parcourir en boucle et envoyer des messages individuels. DROP TABLE
déclarations.