Postgres daterange 可以包含无穷大作为上限吗?

Can a Postgres daterange include infinity as an upper bound?

我看不出如何创建一个以 infinity 作为上限的日期范围。 Postgres 将两个输入都转换为独占上限:

create table dt_overlap (
    id serial primary key,
    validity daterange not null
);

insert into dt_overlap (validity) values
    ('["2019-01-01", infinity]'),
    ('["2019-02-02", infinity)');

table dt_overlap;
 id │       validity
────┼───────────────────────
  1 │ [2019-01-01,infinity)
  2 │ [2019-02-02,infinity)

select id,
    upper(validity),
    upper_inf(validity),
    not isfinite(upper(validity)) as is_inf
from dt_overlap;

 id │  upper   │ upper_inf │ is_inf
────┼──────────┼───────────┼────────
  1 │ infinity │ f         │ t
  2 │ infinity │ f         │ t

这两个值给出相同的结果在某种程度上是意料之中的,因为包含上限 infinity] 被强制为排他上限 infinity).

范围的下限不存在相同的问题,因为日期范围保持包含下限,因此 lower_inf() returns true.

使用 Postgresql 9.6.5 和 Postgresql 10.3 进行测试和复制。

有什么想法吗?

另一种创建无限范围的方法是完全忽略上限,例如'["2019-01-01",)'

with dt_overlap (validity) as (
values
    ('["2019-01-01", infinity]'::daterange),
    ('["2019-02-01",]'::daterange)
)
select validity, 
       upper_inf(validity)
from dt_overlap;

结果

validity              | upper_inf
----------------------+----------
[2019-01-01,infinity) | false    
[2019-02-01,)         | true