Postgresql 如何将Unix历元时间值与Postgres tsrange和tstzrange类型一起使用?

Postgresql 如何将Unix历元时间值与Postgres tsrange和tstzrange类型一起使用?,postgresql,Postgresql,是否可以在不首先转换为其他时间字符串格式的情况下将Unix历元时间值插入tstzrange/tsrange类型的字段? 使用Postgres 9.3,当为tstzrange/tsrange提供to_timestamp()值时,会产生无效的输入语法错误: 考虑到to_timestamp()返回一个类型为timestamp with time zone的值,这有点令人困惑 这并不像这些类型的字段不允许使用函数那样简单,因为now()函数可以正常工作: => select '["now()",]

是否可以在不首先转换为其他时间字符串格式的情况下将Unix历元时间值插入tstzrange/tsrange类型的字段?

使用Postgres 9.3,当为tstzrange/tsrange提供to_timestamp()值时,会产生无效的输入语法错误:

考虑到to_timestamp()返回一个类型为timestamp with time zone的值,这有点令人困惑

这并不像这些类型的字段不允许使用函数那样简单,因为now()函数可以正常工作:

=> select '["now()",]'::tstzrange;
               tstzrange
---------------------------------------
["06-OCT-14 15:11:05.488949 -07:00",)
(1 row)
我现在使用的解决方案是将历元时间转换为格式化字符串(例如“2010-02-27T06:50:00.069539-00”),这可以很好地使用tsrange/tsrange。我认为这并不像直接提供大纪元时间那样有效,如果可能的话,我将不胜感激

=>选择“[”到时间戳(1267253400.069539)”,]::tstzrange

这不提供带有时间戳输出的
tstzrange

它试图使用文本字符串
“to_timestamp(1267253400.069539)”
作为时间戳范围前半部分的文本值

您需要使用方便的函数表单构造函数:

select tstzrange( to_timestamp(1267253400.069539),null );

。。。通过这种方式,任何包含的表达式都会得到计算。

谢谢,构造函数正是我所需要的。我仍然有点困惑,为什么使用now()的示例有效,它显然是在计算该表达式。@terse
now()
是一个非常奇怪的特例。我真的想从文档中的示例中删除所有对它的引用,将其放在附录中,这就是如此混乱的历史黑客所需要的。本质上,PostgreSQL在解析时将字符串literal
now()
作为特例时间戳表示,隐式地将其转换为当前时间戳。这就是为什么将
now()
强制转换为时间戳是有效的。现在,您应该只使用
current\u timestamp
伪函数。
select tstzrange( to_timestamp(1267253400.069539),null );