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 .