Můžete si ponechat své samostatné timestamp
sloupců a stále používat omezení vyloučení na výrazu:
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
);
Vytvoření tsrange
hodnotu bez explicitních hranic jako tsrange(starts_at, ends_at)
automaticky převezme výchozí hranice:včetně dolních a vyjma horních - '[)'
, což je obvykle nejlepší.
SQL Fiddle.
Související:
- Prevence sousedících/překrývajících se položek pomocí EXCLUDE v PostgreSQL
Přidat omezení do existující tabulky
ALTER TABLE tbl ADD CONSTRAINT tbl_no_overlapping_time_ranges
EXCLUDE USING gist (tsrange(starts_at, ends_at) WITH &&)
Podrobnosti syntaxe jsou stejné jako u CREATE TABLE
.