個別のtimestamp
を保持できます 列を使用し、引き続き除外制約を使用します 式について:
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
);
tsrange
の作成 tsrange(starts_at, ends_at)
として明示的な境界のない値 自動的にデフォルトの境界を想定します:下限を含み、上限を除外します-'[)'
、通常は最適です。
SQLフィドル。
関連:
- PostgreSQLでEXCLUDEを使用して隣接/重複するエントリを防止する
既存のテーブルに制約を追加する
ALTER TABLE tbl ADD CONSTRAINT tbl_no_overlapping_time_ranges
EXCLUDE USING gist (tsrange(starts_at, ends_at) WITH &&)
構文の詳細は、CREATE TABLE
の場合と同じです。 。