Alors qu'un CHECK
la contrainte évalue une expression basée sur une seule ligne de la table, un EXCLUDE
contrainte évalue une comparaison de deux lignes dans la table. Pensez-y comme un UNIQUE
généralisé contrainte :au lieu de "aucune ligne ne peut être égale", vous pouvez dire des choses comme "aucune ligne ne se chevauche", ou même "aucune ligne ne peut être différente ".
Pour y parvenir sans vérifier toutes les combinaisons possibles de valeurs, il a besoin d'une structure d'index appropriée qui lui permette de trouver d'éventuelles violations lorsque vous insérez ou mettez à jour une ligne. C'est ce que l'gist
une partie de la déclaration fait référence à :un type particulier d'index qui peut être utilisé pour accélérer les opérations autres que l'égalité.
Le reste de la déclaration est la contrainte elle-même :c
est la colonne testée, et &&
est l'opérateur qui ne doit retourner vrai pour aucune paire de lignes. Dans ce cas, &&
est l'opérateur "chevauchements" comme indiqué sur la page de manuel des opérateurs géométriques .
Ainsi mis ensemble, la contrainte EXCLUDE USING gist (c WITH &&)
se traduit par "pas deux valeurs de c
doivent se chevaucher (plus précisément, A.c && B.c
doit retourner false ou null pour toutes les lignes distinctes A
et B
), et veuillez utiliser un gist
index pour surveiller cette contrainte".