Puede mantener su timestamp
por separado columnas y seguir usando una restricción de exclusión en una expresión:
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
);
Construyendo un tsrange
valor sin límites explícitos como tsrange(starts_at, ends_at)
asume automáticamente los límites predeterminados:incluido el inferior y excluyendo el superior - '[)'
, que normalmente es mejor.
Violín SQL.
Relacionado:
- Evitar entradas adyacentes/superpuestas con EXCLUDE en PostgreSQL
Agregar restricción a la tabla existente
ALTER TABLE tbl ADD CONSTRAINT tbl_no_overlapping_time_ranges
EXCLUDE USING gist (tsrange(starts_at, ends_at) WITH &&)
Los detalles de sintaxis son los mismos que para CREATE TABLE
.