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新时区中显示时间戳。这是预期的行为吗?
答案 0 :(得分:1)
这当然是奇怪的行为,很大程度上是因为我希望show timezone
显示与now()所示相同的时区。我的建议是尝试重现这种情况,然后通过电子邮件发送PostgreSQL列表或提交错误报告。听起来你可以通过在PostgreSQL运行时更改系统时区来解决这个问题。重新加载或重新启动可能会解决问题。
我也是第二个关注ALTER USER ... SET TIMEZONE
的概念,但除此之外,您还可以ALTER DATABASE ... SET TIMEZONE
甚至ALTER FUNCTION ... SET TIMEZONE