Zatímco CHECK
omezení vyhodnotí výraz založený na jediném řádku tabulky, EXCLUDE
omezení vyhodnocuje porovnání dvou řádků v tabulce. Představte si to jako zobecněné UNIQUE
omezení:místo „žádné dva řádky se nemohou rovnat“ můžete říci věci jako „žádné dva řádky se nepřekrývají“ nebo dokonce „žádné dva řádky se nemohou lišit ".
Aby toho bylo možné dosáhnout bez kontroly každé možné kombinace hodnot, potřebuje vhodnou strukturu indexu, která mu umožní najít možná porušení při vkládání nebo aktualizaci řádku. Toto je gist
část prohlášení odkazuje na:konkrétní typ indexu které lze použít k urychlení operací jiných než je rovnost.
Zbytek deklarace je samotné omezení:c
je testovaný sloupec a &&
je operátor, který nesmí vracet true pro žádný pár řádků. V tomto případě &&
je operátor "overlaps" jak je uveden na stránce manuálu geometrických operátorů .
Takže dohromady, omezení EXCLUDE USING gist (c WITH &&)
se překládá jako „žádné dvě hodnoty c
se musí navzájem překrývat (přesněji A.c && B.c
musí vrátit hodnotu false nebo null pro všechny odlišné řádky A
a B
) a použijte prosím gist
index pro sledování tohoto omezení."