sql >> Databasteknik >  >> RDS >> PostgreSQL

Postgres-begränsning för unikt datumintervall

Du kan behålla din separata timestamp kolumner och fortfarande använda en uteslutningsrestriktion på ett uttryck:

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

Konstruera en tsrange värde utan explicita gränser som tsrange(starts_at, ends_at) antar automatiskt standardgränser:inklusive nedre och exklusive övre - '[)' , vilket vanligtvis är bäst.

SQL-fiol.

Relaterat:

  • Förhindra intilliggande/överlappande poster med EXCLUDE i PostgreSQL

Lägg till begränsning till befintlig tabell

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

Syntaxdetaljer är desamma som för CREATE TABLE .




  1. Postgres - Konvertera angränsande lista till kapslade JSON-objekt

  2. Hur kontrollerar man det maximala antalet tillåtna anslutningar till en Oracle-databas?

  3. Få det senaste datumet från grupperad MySQL-data

  4. Långsam enkel uppdateringsfråga på PostgreSQL-databas med 3 miljoner rader