По мотивам поста про хранение купонов с временем устаревания и ограничение unique . Оказывается в Postgres 17 планируется нововведение: к ключевым словам UNIQUE и PRIMARY KEY можно будет добавить WITHOUT OVERLAPS. И тогда, в случае, когда в ключ входит диапазон чего-то, то уникальность будет сравниваться не тупым сравнением, а оператором &&
Вот комит: https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=46a0cd4cefb4d9b462d8cc4df5e7ecdd190bea92
вот пример из него:
Так что скоро это будет возможно без мудрёных хаков
Вот комит: 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)');
Так что скоро это будет возможно без мудрёных хаков