Mientras que un CHECK
La restricción evalúa una expresión basada en una sola fila de la tabla, un EXCLUDE
La restricción evalúa una comparación de dos filas en la tabla. Piense en ello como un UNIQUE
generalizado restricción:en lugar de "dos filas no pueden ser iguales", puede decir cosas como "dos filas no se superponen" o incluso "dos filas no pueden ser diferentes ".
Para lograr esto sin verificar todas las combinaciones posibles de valores, necesita una estructura de índice adecuada que le permita encontrar posibles violaciones cuando inserta o actualiza una fila. Esto es lo que gist
parte de la declaración se refiere a:un tipo particular de índice que puede utilizarse para agilizar operaciones distintas a la de igualdad.
El resto de la declaración es la propia restricción:c
es la columna que se está probando, y &&
es el operador que no debe devolver verdadero para ningún par de filas. En este caso, &&
es el operador de "superposiciones" como se indica en la página del manual de operadores geométricos .
En conjunto, la restricción EXCLUDE USING gist (c WITH &&)
se traduce como "no hay dos valores de c
deben superponerse entre sí (más precisamente, A.c && B.c
debe devolver falso o nulo para todas las filas distintas A
y B
), y utilice un gist
índice para monitorear esta restricción".