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

BEGRÆNSNING for at kontrollere værdier fra en eksternt relateret tabel (via join osv.)

CHECK begrænsninger kan i øjeblikket ikke referere til andre tabeller. Manualen:

I øjeblikket CHECK udtryk kan ikke indeholde underforespørgsler eller henvise til andre variabler end kolonner i den aktuelle række.

En måde er at bruge en trigger som demonstreret af @Wolph.

En ren løsning uden triggere :tilføje redundante kolonner og inkludere dem i FOREIGN KEY begrænsninger , som er det første valg til at håndhæve referentiel integritet. Relateret svar på dba.SE med detaljerede instruktioner:

  • Håndhævelse af begrænsninger "to borde væk"

En anden mulighed ville være at "falske" en IMMUTABLE funktion gør kontrollen og brug den i en CHECK begrænsning. Postgres vil tillade dette, men vær opmærksom på mulige forbehold. Gør det bedst til en NOT VALID begrænsning. Se:

  • Deaktiver alle begrænsninger og tabeltjek, mens du gendanner en dump


  1. Migrerer alle til skyen?

  2. FEJL:kolonne med relation eksisterer ikke PostgreSQL, Kan ikke køre indsæt forespørgsel

  3. Record returneret fra funktion har kolonner sammenkædet

  4. MySQL InnoDB Cluster 8.0 - En komplet gennemgang af implementeringen:Første del