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

问题描述 投票:0回答:2

我在 postgresql.conf 中设置时区如下:-

- Locale and Formatting -

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

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

database postgresql datetime
2个回答
7
投票

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
和相同的方法设置数据库的默认值。


2
投票

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

timezone
。)

为了绝对确定,某些操作是通过

timezone = 'UTC'
发生的,您可以将其封装在具有自己设置的服务器端函数中,覆盖任何用户设置。在此相关答案中找到代码示例:

但是,虽然这符合您问题的措辞,但我认为这不是您想要的。您可能只需要在更改 postgresql.conf

重新加载
即可为新会话设置默认值。

© www.soinside.com 2019 - 2024. All rights reserved.