Postgres now()返回+03时区,但显示时区返回GMT

时间:2013-10-07 17:56:16

标签: postgresql timezone

prompt$ date

Mon Oct  7 17:32:24 UTC 2013

prompt$ psql -U postgres

postgres=# show timezone;

 TimeZone
----------  
 GMT 
(1 row)

postgres=# select now();

              now
-------------------------------
 2013-10-07 20:32:42.354384+03
(1 row)

为什么以+03时区格式返回?我在这里明显缺少什么?

编辑:我解决了这个问题,但问题仍然存在。发生了什么:

我更改了系统的操作系统时区,而没有重新启动postgres服务器。以前的操作系统时区确实是+03。我重新启动postgres后,它工作正常。但这是一个奇怪的情况:postgresql.conf没有明确定义任何时区,客户端(psql)应该始终输出“show timezone”报告的时区中的时间戳。所以仍有一个无法解释的问题:

为什么psql将GMT报告为时区设置,但在OS新时区中显示时间戳。这是预期的行为吗?

1 个答案:

答案 0 :(得分:1)

这当然是奇怪的行为,很大程度上是因为我希望show timezone显示与now()所示相同的时区。我的建议是尝试重现这种情况,然后通过电子邮件发送PostgreSQL列表或提交错误报告。听起来你可以通过在PostgreSQL运行时更改系统时区来解决这个问题。重新加载或重新启动可能会解决问题。

我也是第二个关注ALTER USER ... SET TIMEZONE的概念,但除此之外,您还可以ALTER DATABASE ... SET TIMEZONE甚至ALTER FUNCTION ... SET TIMEZONE