为什么选择localtimestamp会在Postgres的2台不同机器上返回不同的时区

时间:2014-12-08 21:33:30

标签: postgresql timezone clock

如果我在Postgres 9.2上执行

show timezone

在我的机器上,它返回本地时区

America/Denver

当我对我旁边的人运行相同的postgres命令时,它会返回

US/Eastern

任何人都知道为什么Postgres服务器会为两个不同的人使用两个不同的时区吗?

1 个答案:

答案 0 :(得分:0)

语句show time zone显示当前客户端会话的时区。那可能是也可能不是PostgreSQL服务器的时区。

要查看其工作原理,请在同一台计算机上打开两个终端会话,然后使用psql将它们连接到数据库。 (我正在连接一个名为“sandbox”的数据库。我的PostgreSQL服务器设置为本地时间。也就是说,postgresql.conf有一行timezone = 'localtime'。)

在第一个会话中,将时区设置为加利福尼亚州伯克利。

sandbox=# set time zone 'PST8PDT';

set的{​​{3}}为session。此声明相当于set session time zone 'PST8PDT';。)

在第二个会话中,将时区设置为UTC。

sandbox=# set time zone 'UTC';

这些都不是我当地的时区。

现在在每个会话中运行show time zone。第一个将返回'PST8PDT';第二个将返回'UTC'。 服务器的时区仍然是本地时间。

如果我丢弃其中一个连接,然后再连接,我会回到当地时间。

sandbox=# show time zone;
 TimeZone  
-----------
 localtime