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

Ограничение за припокриване на дата Postgres

Добре, накрая направих това:

CREATE TABLE test (
    from_ts TIMESTAMPTZ,
    to_ts TIMESTAMPTZ,
    account_id INTEGER DEFAULT 1,
    product_id INTEGER DEFAULT 1,
    CHECK ( from_ts < to_ts ),
    CONSTRAINT overlapping_times EXCLUDE USING GIST (
        account_id WITH =,
        product_id WITH =,
        period(from_ts, CASE WHEN to_ts IS NULL THEN 'infinity' ELSE to_ts END) WITH &&
    )
);

Работи перфектно с безкрайност, доказателство за транзакции.

Просто трябваше да инсталирам временно разширение, което ще бъде естествено в postgres 9.2 и btree_gist, достъпно като разширение в 9.1 CREATE EXTENSION btree_gist;

nb :ако нямате нулево времеви печат, няма нужда да използвате временното разширение, можете да използвате метода box, както е посочено в моя въпрос.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL не приема псевдоним на колона в клаузата WHERE

  2. pg_ctl Съвети и трикове

  3. Максимален (използваем) брой редове в Postgresql таблица

  4. SQL:Изберете записи, където ВСИЧКИ съединени записи отговарят на някакво условие

  5. Намерете редове, където текстовият масив съдържа стойност, подобна на въведената