获取LOCALTIMESTAMP时,如何使PostgreSQL忽略客户端的时区?

时间:2019-04-15 13:24:49

标签: postgresql timezone

根据文档,PostgreSQL的函数localtimestamp返回“当前日期和时间”,值是“无时区”。但是我发现返回的值不仅取决于当前的绝对时间,还取决于客户端的时区设置:

clan_1=> SET timezone='UTC';
SET
clan_1=> SELECT localtimestamp;
       localtimestamp       
----------------------------
 2019-04-15 12:50:23.754272
(1 row)

clan_1=> SET timezone='Europe/Prague';
SET
clan_1=> SELECT localtimestamp;
       localtimestamp       
----------------------------
 2019-04-15 14:50:33.678917
(1 row)

在我的数据库函数中,无论使用什么客户端(及其时区设置)进行调用,我都需要获取一致的数据( timestamp 类型,而不是 timestamptz )他们。经过研究,我发现以下方法应该起作用:

SELECT current_timestamp AT TIME ZONE 'UTC';

有没有更好(更简单)的方法?


PostgreSQL 10.6

1 个答案:

答案 0 :(得分:0)

您的方法很好,但更简单

SELECT current_timestamp;

它还将为所有会话返回相同的时间戳,只有它们将根据会话时区进行格式化。

这应该不成问题,因为2019-04-01 12:00:00+022019-04-01 10:00:00+00相同。