Puoi mantenere il tuo timestamp
separato colonne e continua a utilizzare un vincolo di esclusione su un'espressione:
CREATE TABLE tbl (
tbl_id serial PRIMARY KEY
, starts_at timestamp
, ends_at timestamp
, EXCLUDE USING gist (tsrange(starts_at, ends_at) WITH &&) -- no overlapping
);
Costruire un tsrange
valore senza limiti espliciti come tsrange(starts_at, ends_at)
assume automaticamente i limiti predefiniti:incluso inferiore ed escluso superiore - '[)'
, che in genere è il migliore.
SQL Fiddle.
Correlati:
- Prevenire voci adiacenti/sovrapposte con EXCLUDE in PostgreSQL
Aggiungi vincolo alla tabella esistente
ALTER TABLE tbl ADD CONSTRAINT tbl_no_overlapping_time_ranges
EXCLUDE USING gist (tsrange(starts_at, ends_at) WITH &&)
I dettagli della sintassi sono gli stessi di CREATE TABLE
.