CHECK
les contraintes ne peuvent actuellement pas référencer d'autres tables. Le manuel :
Actuellement,
CHECK
les 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