Докато CHECK
ограничението оценява израз въз основа на един ред от таблицата, EXCLUDE
ограничение оценява сравнение на два реда в таблицата. Мислете за това като за обобщен UNIQUE
ограничение:вместо „нито два реда не могат да бъдат еднакви“, можете да кажете неща като „нито два реда не се припокриват“ или дори „нито два реда не могат да бъдат различни ".
За да постигне това, без да проверява всяка възможна комбинация от стойности, той се нуждае от подходяща структура на индекса, която му позволява да намира възможни нарушения, когато вмъквате или актуализирате ред. Това е gist
част от декларацията се отнася до:определен тип индекс което може да се използва за ускоряване на операции, различни от равенството.
Останалата част от декларацията е самото ограничение:c
е колоната, която се тества, и &&
е операторът, който не трябва да връща true за никоя двойка редове. В този случай, &&
е операторът "припокриване" както е посочено на страницата с ръководство за геометрични оператори .
Така събрано, ограничението EXCLUDE USING gist (c WITH &&)
се превежда като „няма две стойности на c
трябва да се припокриват (по-точно A.c && B.c
трябва да върне false или null за всички отделни редове A
и B
), и моля, използвайте gist
индекс за наблюдение на това ограничение".