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.