PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Che cosa significa il vincolo di esclusione `EXCLUDE USING gist (c WITH &&)`?

Mentre un CHECK vincolo valuta un'espressione basata su una singola riga della tabella, un EXCLUDE vincolo valuta un confronto di due righe nella tabella. Pensalo come un UNIQUE generalizzato vincolo:invece di "nessuna riga può essere uguale", puoi dire cose come "nessuna riga si sovrappone" o anche "nessuna riga può essere diversa ".

Per ottenere ciò senza controllare ogni possibile combinazione di valori, necessita di un'adeguata struttura di indice che gli consenta di individuare eventuali violazioni quando si inserisce o si aggiorna una riga. Questo è ciò che il gist parte della dichiarazione si riferisce a:un particolare tipo di indice che può essere utilizzato per velocizzare operazioni diverse dall'uguaglianza.

Il resto della dichiarazione è il vincolo stesso:c è la colonna sottoposta a test e && è l'operatore che non deve restituire true per nessuna coppia di righe. In questo caso, && è l'operatore "overlaps" come elencato nella pagina del manuale degli operatori geometrici .

Quindi metti insieme il vincolo EXCLUDE USING gist (c WITH &&) si traduce in "non ci sono due valori di c devono sovrapporsi (più precisamente, A.c && B.c deve restituire false o null per tutte le righe distinte A e B ), e si prega di utilizzare un gist index per monitorare questo vincolo".