Medan en CHECK
begränsning utvärderar ett uttryck baserat på en enda rad i tabellen, en EXCLUDE
constraint utvärderar en jämförelse av två rader i tabellen. Tänk på det som en generaliserad UNIQUE
begränsning:istället för "inga två rader kan vara lika", kan du säga saker som "inga två rader överlappar" eller till och med "inga två rader kan vara olika ".
För att uppnå detta utan att kontrollera alla möjliga kombinationer av värden behöver den en lämplig indexstruktur som gör att den kan hitta möjliga överträdelser när du infogar eller uppdaterar en rad. Detta är vad gist
är en del av deklarationen hänvisar till:en viss typ av index som kan användas för att påskynda andra operationer än jämlikhet.
Resten av deklarationen är själva begränsningen:c
är kolumnen som testas, och &&
är operatorn som inte får returnera sant för något par av rader. I det här fallet, &&
är "överlappningsoperatorn" som listad på sidan för geometriska operatorer .
Så sammanställt, begränsningen EXCLUDE USING gist (c WITH &&)
översätts till "inga två värden av c
måste överlappa varandra (mer exakt, A.c && B.c
måste returnera false eller null för alla distinkta rader A
och B
), och använd en gist
index för att övervaka denna begränsning".