【问题标题】:Is there an issue with Central Africa Time (CAT) PostgreSQL TIMESTAMPTZ conversion?中非时间 (CAT) PostgreSQL TIMESTAMPTZ 转换是否存在问题?
【发布时间】:2019-10-16 16:03:04
【问题描述】:

我们在刚果的一个 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"

版本: "PostgreSQL 11.4 (Ubuntu 11.4-1.pgdg18.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0, 64-bit" 在 Ubuntu 18.04.2 LTS 上

【问题讨论】:

    标签: postgresql timezone


    【解决方案1】:

    无论出于何种原因,默认情况下“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”。

    顺便说一句,从 epoch 转换为 CAT 也可以

    select to_timestamp(1571263200);
    "2019-10-17 00:00:00+02"
    

    'CAT' 没有出现在您的示例中。所以不清楚这是什么例子。

    【讨论】:

    • 你已经确认我没有(完全)疯了,所以谢谢。很抱歉最后一个例子很蹩脚。
    猜你喜欢
    • 2018-07-28
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-15
    • 2012-03-25
    相关资源
    最近更新 更多