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

Vincolo Postgres per un intervallo di datetime univoco

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 .