PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

CONSTRAINT per controllare i valori da una tabella correlata in remoto (tramite join ecc.)

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