【问题标题】:Postgres now() returns +03 timezone but show timezone returns GMTPostgres now() 返回 +03 时区,但显示时区返回 GMT
【发布时间】:2013-10-07 17:56:16
【问题描述】:
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 报告为时区设置,但在操作系统新时区显示时间戳。这是预期的行为吗?

【问题讨论】:

  • 我已经解决了问题,但对我看到的行为仍然不满意。查看我的编辑
  • 除非您在 postgresql.conf 中配置了时区,否则将使用系统默认时区 - 在 postgresql 服务器启动时配置的时区。 “psql”将根据“timezone”设置显示timestamptz-s(默认值==服务器的默认值),无论客户端的时区选择如何。还有一件事:注意 ALTER USER ... SET timezone to '...';

标签: postgresql timezone


【解决方案1】:

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

我也反对注意ALTER USER ... SET TIMEZONE 的概念,但除此之外,您还可以ALTER DATABASE ... SET TIMEZONE 甚至ALTER FUNCTION ... SET TIMEZONE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-07
    • 2016-11-25
    • 2019-12-29
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 2021-09-14
    相关资源
    最近更新 更多