Anda dapat menyimpan timestamp
yang terpisah kolom dan masih menggunakan batasan pengecualian pada ekspresi:
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
);
Membuat tsrange
nilai tanpa batas eksplisit sebagai tsrange(starts_at, ends_at)
secara otomatis mengasumsikan batas default:termasuk bawah dan tidak termasuk atas - '[)'
, yang biasanya terbaik.
SQL Fiddle.
Terkait:
- Mencegah entri yang berdekatan/tumpang tindih dengan EXCLUDE di PostgreSQL
Tambahkan batasan ke tabel yang ada
ALTER TABLE tbl ADD CONSTRAINT tbl_no_overlapping_time_ranges
EXCLUDE USING gist (tsrange(starts_at, ends_at) WITH &&)
Detail sintaks sama dengan CREATE TABLE
.