sql >> Database teknologi >  >> RDS >> PostgreSQL

Postgres-begrænsning for unikt dato- og tidsinterval

Du kan beholde dit separate timestamp kolonner og stadig bruge en ekskluderingsbegrænsning på et udtryk:

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

Konstruktion af en tsrange værdi uden eksplicitte grænser som tsrange(starts_at, ends_at) antager automatisk standardgrænser:inklusive nedre og eksklusive øvre - '[)' , hvilket typisk er bedst.

SQL Fiddle.

Relateret:

  • Forebyggelse af tilstødende/overlappende poster med EXCLUDE i PostgreSQL

Tilføj begrænsning til eksisterende tabel

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

Syntaksdetaljer er de samme som for CREATE TABLE .




  1. Indsæt alle værdier af en tabel i en anden tabel i SQL

  2. Hvorfor skulle jeg ikke bruge mysql_* funktioner i PHP?

  3. 7-trins guide til brug af Access med Azure Multi-Factor Authentication

  4. Hvad repræsenterer en dobbelt i sql-server?