Bạn có thể giữ timestamp
riêng biệt của mình và vẫn sử dụng ràng buộc loại trừ trên một biểu thức:
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
);
Tạo tsrange
giá trị không có giới hạn rõ ràng là tsrange(starts_at, ends_at)
tự động giả định các giới hạn mặc định:bao gồm dưới và không bao gồm trên - '[)'
, thường là tốt nhất.
SQL Fiddle.
Có liên quan:
- Ngăn các mục nhập liền kề / chồng chéo với EXCLUDE trong PostgreSQL
Thêm ràng buộc vào bảng hiện có
ALTER TABLE tbl ADD CONSTRAINT tbl_no_overlapping_time_ranges
EXCLUDE USING gist (tsrange(starts_at, ends_at) WITH &&)
Chi tiết cú pháp giống như đối với CREATE TABLE
.