CHECK
i vincoli non possono attualmente fare riferimento ad altre tabelle. Il manuale:
Attualmente, CHECK
le espressioni non possono contenere sottoquery né fare riferimento a variabili diverse dalle colonne della riga corrente.
Un modo è usare un trigger come dimostrato da @Wolph.
Una soluzione pulita senza trigger :aggiungi colonne ridondanti e includile in FOREIGN KEY
vincoli , che rappresentano la prima scelta per imporre l'integrità referenziale. Risposta correlata su dba.SE con istruzioni dettagliate:
- Applicare i vincoli "a due tavoli di distanza"
Un'altra opzione sarebbe quella di "falsificare" un IMMUTABLE
funzione fare il controllo e usarlo in un CHECK
vincolo. Postgres lo consentirà, ma tieni presente i possibili avvertimenti. È meglio che sia un NOT VALID
vincolo. Vedi:
- Disabilita tutti i vincoli e i controlli delle tabelle durante il ripristino di un dump