Sie können Ihren separaten timestamp
beibehalten Spalten und verwenden dennoch eine Ausschlussbeschränkung auf einen Ausdruck:
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
);
Erstellen eines tsrange
Wert ohne explizite Grenzen als tsrange(starts_at, ends_at)
nimmt automatisch Standardgrenzen an:einschließlich unterer und ausschließlich oberer - '[)'
, was normalerweise am besten ist.
SQL-Geige.
Verwandte:
- Benachbarte/überlappende Einträge mit EXCLUDE in PostgreSQL verhindern
Einschränkung zu bestehender Tabelle hinzufügen
ALTER TABLE tbl ADD CONSTRAINT tbl_no_overlapping_time_ranges
EXCLUDE USING gist (tsrange(starts_at, ends_at) WITH &&)
Syntaxdetails sind dieselben wie für CREATE TABLE
.