PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Ograniczenie nakładania się dat Postgres

Ok, skończyłem tak:

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

Działa doskonale z nieskończonością, dowód transakcji.

Musiałem tylko zainstalować tymczasowe rozszerzenie, które będzie natywne w postgres 9.2 i btree_gist dostępne jako rozszerzenie w 9.1 CREATE EXTENSION btree_gist;

nb :jeśli nie masz pustego znacznika czasu, nie ma potrzeby używania rozszerzenia czasowego, możesz skorzystać z metody pudełkowej, jak określono w moim pytaniu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przechowywanie obrazów w PostgreSQL

  2. Agreguj jedną kolumnę w zapytaniu z wieloma kolumnami

  3. Udostępnij połączenie do postgres db między procesami w Pythonie

  4. Zaznaczanie wszystkich rekordów za pomocą zapytania SQL LIMIT i OFFSET

  5. Funkcja AVG() w PostgreSQL