2
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)应该始终输出“显示时区”报告的时区中的时间戳。所以还有这个无法解释的问题:

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

4

1 回答 1

1

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

我也支持提防的想法ALTER USER ... SET TIMEZONE,但除此之外,您还可以ALTER DATABASE ... SET TIMEZONE甚至ALTER FUNCTION ... SET TIMEZONE

于 2013-11-25T13:43:40.493 回答