Możesz zachować swój oddzielny timestamp
kolumn i nadal używa ograniczenia wykluczenia na wyrażeniu:
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
);
Konstruowanie tsrange
wartość bez wyraźnych granic jako tsrange(starts_at, ends_at)
automatycznie przyjmuje domyślne granice:włączając dolne i wyłączając górne - '[)'
, co zazwyczaj jest najlepsze.
Skrzypce SQL.
Powiązane:
- Zapobieganie sąsiednim/nakładającym się wpisom za pomocą EXCLUDE w PostgreSQL
Dodaj ograniczenie do istniejącej tabeli
ALTER TABLE tbl ADD CONSTRAINT tbl_no_overlapping_time_ranges
EXCLUDE USING gist (tsrange(starts_at, ends_at) WITH &&)
Szczegóły składni są takie same jak w przypadku CREATE TABLE
.