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 .