CHECK begränsningar kan för närvarande inte referera till andra tabeller. Manualen:
För närvarande
CHECKuttryck kan inte innehålla underfrågor eller hänvisa till andra variabler än kolumner i den aktuella raden.
Ett sätt är att använda en trigger som visas av @Wolph.
En ren lösning utan triggers :lägg till redundanta kolumner och inkludera dem i FOREIGN KEY begränsningar , som är förstahandsvalet för att upprätthålla referensintegritet. Relaterat svar på dba.SE med detaljerade instruktioner:
- Tillämpa begränsningar "två bord bort"
Ett annat alternativ skulle vara att "falska" en IMMUTABLE funktion gör kontrollen och använd den i en CHECK begränsning. Postgres tillåter detta, men var medveten om möjliga varningar. Det är bäst att göra det till en NOT VALID begränsning. Se:
- Inaktivera alla begränsningar och tabellkontroller medan du återställer en dump