sql >> Databáze >  >> RDS >> PostgreSQL

Postgres omezení pro jedinečný rozsah data a času

Můžete si ponechat své samostatné timestamp sloupců a stále používat omezení vyloučení na výrazu:

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
);

Vytvoření tsrange hodnotu bez explicitních hranic jako tsrange(starts_at, ends_at) automaticky převezme výchozí hranice:včetně dolních a vyjma horních - '[)' , což je obvykle nejlepší.

SQL Fiddle.

Související:

  • Prevence sousedících/překrývajících se položek pomocí EXCLUDE v PostgreSQL

Přidat omezení do existující tabulky

ALTER TABLE tbl ADD CONSTRAINT tbl_no_overlapping_time_ranges
EXCLUDE USING gist (tsrange(starts_at, ends_at) WITH &&)

Podrobnosti syntaxe jsou stejné jako u CREATE TABLE .




  1. jak implementovat dědičnost tabulky v GreenDao

  2. Kerberos pro SQLyog od MariaDB Connector/C

  3. Mapování NHibernate pro datový typ Oracle INTERVAL DAY TO SECOND

  4. Pochopení účinků vysoké latence v řešeních MySQL a MariaDB s vysokou dostupností