我们在刚果的一个 PostgreSQL 11.4 部署使用了 CAT 时区(非洲/基加利 +02),并且在尝试将人工输入的时间戳转换为实际的 TIMESTAMPTZ
数据时我们的一个函数阻塞。
例如:
SELECT '2019-10-17 00:00:00 CAT'::TIMESTAMPTZ;
ERROR: invalid input syntax for type timestamp with time zone: "2019-10-17 00:00:00 CAT"
LINE 2: SELECT '2019-10-17 00:00:00 CAT'::TIMESTAMPTZ
^
SQL state: 22007
Character: 9
但是当我尝试使用 CEST(中欧语,也是 +02)时,它起作用了。
SELECT '2019-10-17 00:00:00 CEST'::TIMESTAMPTZ;
"2019-10-17 00:00:00+02"
顺便说一下,从 epoch 转换为 CAT 也可以
select to_timestamp(1571263200);
"2019-10-17 00:00:00+02"
版本:
“x86_64-pc-linux-gnu 上的 PostgreSQL 11.4 (Ubuntu 11.4-1.pgdg18.04+1),由 gcc (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0,64 位编译”
在 Ubuntu 18.04.2 LTS 上
最佳答案
无论出于何种原因,'CAT' 默认情况下对于输入无效,大概是有人觉得它有歧义之类的。您可以附加行
CAT 7200 # Central Africa Time
到文件“$SHAREDIR/timezonesets/Default”以使其工作。
或者您可以创建一个包含以下内容的文件“$SHAREDIR/timezonesets/Africa”:
@INCLUDE Default
@OVERRIDE
CAT 7200 # Central Africa Time
然后将参数 timezone_abbreviations 设置为 'Africa'。
我不是钟表学家,你可能想在盲目添加之前研究一下为什么缺少 CAT。另外,如果你走上述任何一条路线,你应该在某个地方清楚地记录下来。您将需要重复升级 PostgreSQL、还原或移动数据库时执行的步骤。
或者,您可以预处理用户输入,将“CAT”替换为“Africa/Kigali”。
Incidentally, converting from epoch to CAT also works
select to_timestamp(1571263200); "2019-10-17 00:00:00+02"
'CAT' 没有出现在您的示例中。所以不清楚这是什么例子。
关于postgresql - 中非时间 (CAT) PostgreSQL TIMESTAMPTZ 转换是否存在问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58417452/