sql >> Databasteknik >  >> RDS >> PostgreSQL

Postgres datum överlappande begränsning

Ok, det slutade med att jag gjorde det här:

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

Fungerar perfekt med oändlighet, transaktionssäker.

Jag var bara tvungen att installera temporal extension som kommer att vara inbyggt i postgres 9.2 och btree_gist tillgängligt som ett tillägg i 9.1 CREATE EXTENSION btree_gist;

OBS:om du inte har noll tidsstämpel finns det inget behov av att använda den tidsmässiga förlängningen du kan använda boxmetoden som specificeras i min fråga.



  1. Hur man hittar den sista dagen i månaden för ett givet datum i MySQL

  2. SQLite Sum() vs Total():Vad är skillnaden?

  3. Bucketizing datum och tid data

  4. Introduktion till SQL Server