Terwijl een CHECK
constraint evalueert een expressie op basis van een enkele rij van de tabel, een EXCLUDE
constraint evalueert een vergelijking van twee rijen in de tabel. Zie het als een algemene UNIQUE
beperking:in plaats van "geen twee rijen kunnen gelijk zijn", kun je dingen zeggen als "geen twee rijen overlappen", of zelfs "geen twee rijen kunnen verschillend zijn ".
Om dit te bereiken zonder elke mogelijke combinatie van waarden te controleren, heeft het een geschikte indexstructuur nodig waarmee het mogelijke overtredingen kan vinden wanneer u een rij invoegt of bijwerkt. Dit is wat de gist
een deel van de verklaring verwijst naar:een bepaald type index die kan worden gebruikt om andere bewerkingen dan gelijkheid te versnellen.
De rest van de declaratie is de beperking zelf:c
is de kolom die wordt getest, en &&
is de operator die voor geen enkel paar rijen true mag retourneren. In dit geval &&
is de "overlaps"-operator zoals vermeld op de handleidingpagina voor geometrische operatoren .
Dus samengesteld, de beperking EXCLUDE USING gist (c WITH &&)
vertaalt naar "geen twee waarden van c
moeten elkaar overlappen (meer precies, A.c && B.c
moet false of null retourneren voor alle afzonderlijke rijen A
en B
), en gebruik een gist
index om deze beperking te controleren".