sql >> Databasteknik >  >> RDS >> PostgreSQL

CONSTRAINT för att kontrollera värden från en fjärrrelaterade tabell (via join etc.)

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


  1. Introduktion till SQL-datatyper

  2. Databas som kan hantera>500 miljoner rader

  3. Varför använda INCLUDE-satsen när du skapar ett index?

  4. Hur säkerhetskopierar och återställer jag MySQL-databas?