Du kan behålla din separata timestamp
kolumner och fortfarande använda en uteslutningsrestriktion på ett uttryck:
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
);
Konstruera en tsrange
värde utan explicita gränser som tsrange(starts_at, ends_at)
antar automatiskt standardgränser:inklusive nedre och exklusive övre - '[)'
, vilket vanligtvis är bäst.
SQL-fiol.
Relaterat:
- Förhindra intilliggande/överlappande poster med EXCLUDE i PostgreSQL
Lägg till begränsning till befintlig tabell
ALTER TABLE tbl ADD CONSTRAINT tbl_no_overlapping_time_ranges
EXCLUDE USING gist (tsrange(starts_at, ends_at) WITH &&)
Syntaxdetaljer är desamma som för CREATE TABLE
.