查询时区 - 数据库服务器和客户端机器有不同的时区

Query timezone - db server & client machine have different time zones

(这是 的后续)

我正在使用 PostgreSQL 9.x,例如,数据库服务器的默认时区为 +9,它有一个 table,其中包含一个 timezone 类型的列。

有一个Java程序与数据库在同一台服务器上,它从数据库中查询数据。数据库所在的服务器和 Java 服务器程序的客户端(浏览器)都在时区 -8.

我的问题是:

总是得到same data in browser client as the db original value。显示同一时间点(在不同时区)的方式有很多种。两个示例(timestamptz 值的文本表示):

'2012-03-05 20:00:00+03'
'2012-03-05 18:00:00+01'

相同

就Postgres而言,服务器的时区设置与此完全无关。唯一相关的是会话的设置。唯一改变的是值的显示。始终是同一时间点。

因此只需在您的会话中设置时区即可获得相应的文本表示:

  • Set timezone of PostgreSQL instance
  • PostgreSQL dump and restore in different timezone
  • Set timestamp column's timezone in PostgreSQL

另一种选择是 AT TIME ZONE 结构。将 timestamp 作为 local timestamp without time zone:

SELECT my_timestamptz_column AT TIME ZONE '-8';

处理 table that contains a column of timezone type 时,这可能是更好的方法,因为每一行的时区都可能发生变化。

同样,所有这些都在参考答案中:

  • Ignoring timezones altogether in Rails and PostgreSQL