sql >> Database teknologi >  >> RDS >> PostgreSQL

Postgres dato overlappende begrænsning

Ok, jeg endte med at gøre dette:

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

Fungerer perfekt med uendelig, transaktionssikker.

Jeg skulle bare installere temporal udvidelse, som vil være indbygget i postgres 9.2 og btree_gist tilgængelig som en udvidelse i 9.1 CREATE EXTENSION btree_gist;

nb:hvis du ikke har null timestamp, er der ingen grund til at bruge den tidsmæssige udvidelse, du kunne gå med boksmetoden som specificeret i mit spørgsmål.



  1. Hvordan indstiller man en maksimal udførelsestid for en mysql-forespørgsel?

  2. LINQ til SQL flere tabeller venstre ydre joinforbindelse

  3. Opret en "Sidst ændret" kolonne i SQL Server

  4. Sådan omdøbes et kolonnenavn i SQL?