如何永久地在postgres中将时区更改为UTC?

时间:2017-12-09 10:36:00

标签: database postgresql datetime

我在postgresql.conf中设置了时区,如下所示: -

- Locale and Formatting -

datestyle = 'iso, mdy'
#intervalstyle = 'postgres'
timezone = 'UTC'
#timezone_abbreviations = 'Default'

但是当我确实在postgres服务器中看到时区时,它默认为“亚洲/加尔各答”。 我在MacOs中使用brew包安装了postgres。

2 个答案:

答案 0 :(得分:0)

timezone中设置postgresql.conf只为没有此设置的客户端设置默认值。如果您看到其他值,则表示客户端将其设置为某个本地值。

或者您没有重新加载服务器:

select pg_reload_conf();

要检查设置以及启用它所需的内容,您可以:

t=# select * from pg_settings where name = 'TimeZone';
-[ RECORD 1 ]---+----------------------------------------------------------------
name            | TimeZone
setting         | UTC
unit            |
category        | Client Connection Defaults / Locale and Formatting
short_desc      | Sets the time zone for displaying and interpreting time stamps.
extra_desc      |
context         | user
vartype         | string
source          | configuration file
min_val         |
max_val         |
enumvals        |
boot_val        | GMT
reset_val       | UTC
sourcefile      | /Users/vao/t96/postgresql.conf
sourceline      | 556
pending_restart | f 

pending_restart false表示您不需要重新启动postgres,但仍需要在更改后重新加载配置。此外,您看到此设置仅影响客户端。显然,客户端可以轻松覆盖默认值。

设置时区客户端,只需运行set timezone to 'UTC'

为了永久地为某些用户设置此项,请使用alter user uname set timezone和设置db的默认值相同。

答案 1 :(得分:0)

设置配置变量的方法有很多种。但是大多数这些设置都可以被客户在其交易中推翻。 (某些设置需要重新启动服务器或有其他限制,但不是timezone。)

为了确保使用timezone = 'UTC'进行某些操作,您可以使用自己的设置将其封装在服务器端函数中,从而覆盖任何用户设置。在此相关答案中查找代码示例:

虽然这符合你问题的措辞,但我并不认为你正在寻找的是什么。在更改postgresql.conf以设置新会话的默认值后,您可能只需要重新加载