smi*_*arm 4 postgresql infinity range-types postgresql-9.3
在编写一个接受来自用户的tsrange文字的程序的过程中,然后将其插入到各种SQL查询中,今天我正在测试一些tsrange,看看它们是如何被PostgreSQL 9.3.5解释的.
特别是这个行为奇怪:'( - 无限,今天)':: tsrange
lower_inf函数表示下限不是无限的(!)
test=> SELECT lower_inf('(-infinity,today)'::tsrange);
lower_inf
-----------
f
(1 row)
Run Code Online (Sandbox Code Playgroud)
然而PostgreSQL报告说这个tsrange包含一个时间戳,如'1000-01-01 BC'...
test=> SELECT '(-infinity,today)'::tsrange @> '1000-01-01 BC'::timestamp;
?column?
----------
t
(1 row)
Run Code Online (Sandbox Code Playgroud)
任何人都可以阐明这一点吗?
混乱源于这里"无限"的两种不同含义.
timestamp类型接受特殊值infinity和-infinity.lower_inf()和upper_inf(),但他们确实在测试范围为"无界".范围没有上限/下限包括的值 infinity/-infinity对timestamp分别.此外,一些元素类型具有"无穷大"的概念,但就范围类型机制而言,这只是另一个值.例如,在时间戳范围内,
[today,]意味着与之相同[today,).但[today,infinity]意味着不同的东西[today,infinity)- 后者排除了特殊的时间戳值infinity.
也许这些功能应该被称为类似的东西lower_nobound()并upper_nobound()避免混淆......
| 归档时间: |
|
| 查看次数: |
923 次 |
| 最近记录: |