По мотивам поста про хранение купонов с временем устаревания и ограничение unique . Оказывается в Postgres 17 планируется нововведение: к ключевым словам UNIQUE и PRIMARY KEY можно будет добавить WITHOUT OVERLAPS. И тогда, в случае, когда в ключ входит диапазон чего-то, то уникальность будет сравниваться не тупым сравнением, а оператором &&



Вот комит: https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=46a0cd4cefb4d9b462d8cc4df5e7ecdd190bea92



вот пример из него:





CREATE TABLE temporal_rng (

id integer,

valid_at daterange,

CONSTRAINT temporal_rng_pk PRIMARY KEY (id, valid_at WITHOUT OVERLAPS)

);





INSERT INTO temporal_rng VALUES

(1, '[2000-01-01,2001-01-01)');



INSERT INTO temporal_rng VALUES

(1, '[2001-01-01,2002-01-01)');



INSERT INTO temporal_rng VALUES

(2, '[2000-01-01,2001-01-01)');



-- запрос не пройдёт, так как перекается диапазон дат с первой строкой (для одного и того же id)

INSERT INTO temporal_rng VALUES

(1, '[2000-06-01,2001-01-01)');







Так что скоро это будет возможно без мудрёных хаков