Документация гласит:
Кроме того, некоторые типы элементов имеют понятие «бесконечность», но это просто еще одно значение, если рассматривать механизмы типов диапазона.,Например, в диапазонах отметок времени [today,]
означает то же самое, что и [today,)
.Но [today,infinity]
означает что-то отличное от [today,infinity)
- последнее исключает специальное значение метки времени infinity
.
Это, кажется, категорически противоречит вашим наблюдениям, потому что
SELECT 'infinity'::date;
date
----------
infinity
(1 row)
Это объясняется тем, что PostgreSQL преобразует диапазоны «дискретных» типов (date
и integer
типов) в их «каноническое» представление:
SELECT '[2010-01-01,2010-02-28]'::daterange;
daterange
-------------------------
[2010-01-01,2010-03-01)
(1 row)
Вот что произошло в вашем примере:PostgreSQL добавляет 1 к infinity
(что не меняет значение) и преобразует включающую верхнюю границу в исключительную верхнюю границу.
Теперь это, возможно, не правильное поведение, поскольку теперь infinity
нечасть интервала больше.Я отправил патч для этого, и он был исправлен с помощью commit e6feef571a .