CHECK
begränsningar kan för närvarande inte referera till andra tabeller. Manualen:
För närvarande
CHECK
uttryck 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