Du kan beholde dit separate timestamp
kolonner og stadig bruge en ekskluderingsbegrænsning på et udtryk:
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
);
Konstruktion af en tsrange
værdi uden eksplicitte grænser som tsrange(starts_at, ends_at)
antager automatisk standardgrænser:inklusive nedre og eksklusive øvre - '[)'
, hvilket typisk er bedst.
SQL Fiddle.
Relateret:
- Forebyggelse af tilstødende/overlappende poster med EXCLUDE i PostgreSQL
Tilføj begrænsning til eksisterende tabel
ALTER TABLE tbl ADD CONSTRAINT tbl_no_overlapping_time_ranges
EXCLUDE USING gist (tsrange(starts_at, ends_at) WITH &&)
Syntaksdetaljer er de samme som for CREATE TABLE
.