是否可以将Unix纪元时间值插入到tstzrange / tsrange类型的字段中,而无需先转换为其他时间字符串格式?
使用Postgres 9.3时,当tstzrange / tsrange与to_timestamp()值一起提供时,会产生无效的输入语法错误:
=> select '["to_timestamp(1267253400.069539)",]'::tstzrange;
ERROR: invalid input syntax for type timestamp with time zone: "to_timestamp(1267253400.069539)"
LINE 1: select '["to_timestamp(1267253400.069539)",]'::tstzrange;
这有点令人困惑,因为to_timestamp()返回一个带时区的带时区的值。
它不像这些类型的字段不允许的函数那么简单,因为now()函数工作正常:
=> select '["now()",]'::tstzrange;
tstzrange
---------------------------------------
["06-OCT-14 15:11:05.488949 -07:00",)
(1 row)
我现在使用的解决方案是将纪元时间转换为格式化字符串(例如'2010-02-27T06:50:00.069539-00'),这与tstzrange / tsrange一起工作正常。我认为这不如直接提供纪元时间那么高效,并希望知道是否有可能。
答案 0 :(得分:1)
=> select '["to_timestamp(1267253400.069539)",]'::tstzrange;
这不会为tstzrange
提供to_timestamp
输出。
它正在尝试使用文本字符串"to_timestamp(1267253400.069539)"
作为时间戳范围前半部分的文字值。
您将需要使用方便的函数表单构造函数:
select tstzrange( to_timestamp(1267253400.069539),null );
......就这样评估任何包含的表达式。