PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Postgres ограничение за уникален диапазон от дата и час

Можете да запазите своя отделен timestamp колони и все още използвате ограничение за изключване върху израз:

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

Създаване на tsrange стойност без изрични граници като tsrange(starts_at, ends_at) автоматично приема границите по подразбиране:включително долната и с изключение на горната - '[)' , което обикновено е най-доброто.

SQL Fiddle.

Свързано:

  • Предотвратяване на съседни/припокриващи се записи с EXCLUDE в PostgreSQL

Добавяне на ограничение към съществуваща таблица

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

Подробностите за синтаксиса са същите като за CREATE TABLE .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. DATEADD еквивалент в PostgreSQL

  2. Как да форматирате числата като валута в PostgreSQL

  3. Добавяне на 'serial' към съществуваща колона в Postgres

  4. Какъв е форматът на низа/URL за връзка на PostgreSQL?

  5. Прозоречна функция на Postgres и групиране по изключение