Considerando que um
CHECK
restrição avalia uma expressão com base em uma única linha da tabela, um EXCLUDE
restrição avalia uma comparação de duas linhas na tabela. Pense nisso como um UNIQUE
generalizado restrição:em vez de "não há duas linhas podem ser iguais", você pode dizer coisas como "não há sobreposição de duas linhas" ou até "não há duas linhas podem ser diferentes ". Para conseguir isso sem verificar todas as combinações possíveis de valores, ele precisa de uma estrutura de índice apropriada que permita encontrar possíveis violações ao inserir ou atualizar uma linha. Isto é o que a
gist
parte da declaração refere-se a:um tipo específico de índice que pode ser usado para acelerar outras operações além da igualdade. O restante da declaração é a própria restrição:
c
é a coluna que está sendo testada e &&
é o operador que não deve retornar true para nenhum par de linhas. Nesse caso, &&
é o operador "overlaps" conforme listado na página do manual de operadores geométricos . Então, juntos, a restrição
EXCLUDE USING gist (c WITH &&)
se traduz em "não há dois valores de c
devem se sobrepor (mais precisamente, A.c && B.c
deve retornar false ou null para todas as linhas distintas A
e B
), e use um gist
index para monitorar essa restrição".