Mens en CHECK
begrænsning evaluerer et udtryk baseret på en enkelt række i tabellen, en EXCLUDE
constraint evaluerer en sammenligning af to rækker i tabellen. Tænk på det som en generaliseret UNIQUE
begrænsning:I stedet for "ingen to rækker kan være ens", kan du sige ting som "ingen to rækker overlapper hinanden", eller endda "ingen to rækker kan være forskellige ".
For at opnå dette uden at kontrollere enhver mulig kombination af værdier, har den brug for en passende indeksstruktur, som gør det muligt at finde mulige overtrædelser, når du indsætter eller opdaterer en række. Dette er hvad gist
er en del af erklæringen henviser til:en bestemt type indeks som kan bruges til at fremskynde andre operationer end ligestilling.
Resten af erklæringen er selve begrænsningen:c
er kolonnen, der testes, og &&
er operatoren, som ikke må returnere sand for et par rækker. I dette tilfælde &&
er "overlaps"-operatoren som angivet på siden med geometriske operatorer .
Så sat sammen, begrænsningen EXCLUDE USING gist (c WITH &&)
oversættes til "ikke to værdier af c
skal overlappe hinanden (mere præcist, A.c && B.c
skal returnere false eller null for alle distinkte rækker A
og B
), og brug venligst en gist
indeks for at overvåge denne begrænsning".