PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

O que significa a restrição de exclusão `EXCLUDE USING gist (c WITH &&)`?


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