PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Que signifie la contrainte d'exclusion `EXCLUDE USING gist (c WITH &&)` ?

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".