sql >> Database >  >> RDS >> PostgreSQL

Overlappende beperking voor datums na gres

Ok ik heb dit uiteindelijk gedaan:

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

Werkt perfect met oneindig, transactiebestendig.

Ik moest gewoon een tijdelijke extensie installeren die native wordt in postgres 9.2 en btree_gist beschikbaar als een extensie in 9.1 CREATE EXTENSION btree_gist;

nb:als je geen null-tijdstempel hebt, is het niet nodig om de tijdelijke extensie te gebruiken, je kunt de box-methode gebruiken zoals gespecificeerd in mijn vraag.



  1. T-SQL-bugs, valkuilen en best practices - draaiend en ondraaiend

  2. Geef de besturing door aan een specifieke regel met de opdracht Goto Label in PLSQL

  3. Wat is een databaseschema?

  4. Hoe maak je een ja/nee boolean veld in SQL server?