U kunt uw aparte timestamp
. behouden kolommen en gebruik nog steeds een uitsluitingsbeperking op een uitdrukking:
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
);
Een tsrange
maken waarde zonder expliciete grenzen als tsrange(starts_at, ends_at)
neemt automatisch standaardgrenzen aan:inclusief onder en exclusief boven - '[)'
, wat meestal het beste is.
SQL Fiddle.
Gerelateerd:
- Aangrenzende/overlappende items voorkomen met EXCLUDE in PostgreSQL
Beperking toevoegen aan bestaande tabel
ALTER TABLE tbl ADD CONSTRAINT tbl_no_overlapping_time_ranges
EXCLUDE USING gist (tsrange(starts_at, ends_at) WITH &&)
Syntaxisdetails zijn hetzelfde als voor CREATE TABLE
.