CHECK les contraintes ne peuvent actuellement pas référencer d'autres tables. Le manuel :
Actuellement,
CHECKles expressions ne peuvent pas contenir de sous-requêtes ni faire référence à des variables autres que les colonnes de la ligne actuelle.
Une façon consiste à utiliser un déclencheur comme démontré par @Wolph.
Une solution propre sans déclencheurs :ajouter des colonnes redondantes et les inclure dans FOREIGN KEY contraintes , qui sont le premier choix pour appliquer l'intégrité référentielle. Réponse connexe sur dba.SE avec des instructions détaillées :
- Appliquer des contraintes "deux tables plus loin"
Une autre option serait de "faux" un IMMUTABLE fonction faire la vérification et l'utiliser dans un CHECK contrainte. Postgres le permettra, mais soyez conscient des mises en garde possibles. Mieux vaut en faire un NOT VALID contrainte. Voir :
- Désactiver toutes les contraintes et vérifications de table lors de la restauration d'un vidage