sql >> Databáze >  >> RDS >> PostgreSQL

Postgres datum překrývající se omezení

Dobře, skončil jsem s tímto:

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

Funguje perfektně s nekonečnem, transakční důkaz.

Musel jsem nainstalovat dočasné rozšíření, které bude nativní v postgresu 9.2 a btree_gist dostupné jako rozšíření v 9.1 CREATE EXTENSION btree_gist;

nb:pokud nemáte nulové časové razítko, není nutné používat dočasné rozšíření, které můžete použít pomocí metody box, jak je uvedeno v mé otázce.



  1. Spuštění Galera Cluster na Kubernetes

  2. Volání uložené procedury s parametrem v c#

  3. Je pozice sloupce id v Postgresql důležitá?

  4. Jak timeofday() funguje v PostgreSQL