Можете да запазите своя отделен 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 Fiddle.
Свързано:
- Предотвратяване на съседни/припокриващи се записи с EXCLUDE в PostgreSQL
Добавяне на ограничение към съществуваща таблица
ALTER TABLE tbl ADD CONSTRAINT tbl_no_overlapping_time_ranges
EXCLUDE USING gist (tsrange(starts_at, ends_at) WITH &&)
Подробностите за синтаксиса са същите като за CREATE TABLE
.