PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Postgres-Einschränkung für einen eindeutigen Datetime-Bereich

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 .