PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

CONSTRAINT pour vérifier les valeurs d'une table liée à distance (via une jointure, etc.)

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