sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Qué significa la restricción de exclusión `EXCLUDE USING gist (c WITH &&)`?

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