Ok saya akhirnya melakukan ini :
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 &&
)
);
Bekerja sempurna dengan tak terhingga, bukti transaksi.
Saya baru saja menginstal ekstensi temporal yang akan menjadi asli di postgres 9.2 dan btree_gist tersedia sebagai ekstensi di 9.1 CREATE EXTENSION btree_gist;
nb :jika Anda tidak memiliki stempel waktu nol, tidak perlu menggunakan ekstensi temporal, Anda dapat menggunakan metode kotak seperti yang ditentukan dalam pertanyaan saya.