Postgres 默认时区

我安装了 PostgreSQL 9,它显示的时间比服务器时间晚1个小时。

运行 Select NOW()显示: 2011-07-12 11:51:50.453842+00

服务器日期显示: Tue Jul 12 12:51:40 BST 2011

它是1小时后,但时区显示在 phppgadmin是: TimeZone Etc/GMT0

我已经尝试进入 postgresql.conf和设置

时区 = 格林尼治时间

然后运行重新启动,但没有更改。

有什么想法我认为它只是使用服务器时区,但显然没有? !

解决方案: 我之前调到 GMT了,晚了一个小时。经过搜索,我发现我需要把它设置为 Europe/London。这考虑到 + 1小时在英国夏季时间,格林威治标准时间没有!

320417 次浏览

时区是一个会话参数。因此,您可以更改当前会话的时区。

参见 医生

set timezone TO 'GMT';

或者,更紧密地遵循 SQL 标准,使用 SET TIME ZONE命令。注意“ TIME ZONE”的两个单词,其中上面的代码使用了一个单词“ timezone”。

SET TIME ZONE 'UTC';

医生解释了区别:

SETTIMEZONE 扩展 SQL 标准中定义的语法。该标准只允许数字时区偏移量,而 PostgreSQL 允许更灵活的时区规范。所有其他 SET 特性都是 PostgreSQL 扩展。

要完成 Postgres 9.1中的时区更改,您必须:

1.- 在/usr/share/postgreql/9.1/的“时区”文件夹中搜索适当的文件,在我的例子中是“ America.txt”,在其中,搜索距离你的区域最近的位置,并复制左栏中的第一个字母。

例如: 如果你在“纽约”或“巴拿马”,那就是“ EST”:

#  - EST: Eastern Standard Time (Australia)
EST    -18000    # Eastern Standard Time (America)
#     (America/New_York)
#     (America/Panama)

2.- 取消对 postgresql.conf文件中“时区”一行的注释,并将时区显示如下:

#intervalstyle = 'postgres'
#timezone = '(defaults to server environment setting)'
timezone = 'EST'
#timezone_abbreviations = 'EST'     # Select the set of available time zone
# abbreviations.  Currently, there are
#   Default
#   Australia

3.- Restart Postgres

穆罕默德 · 乌萨马接受的答案是正确的。

配置参数名称

这个答案显示了如何使用以下内容设置 Postgres 特定的配置参数:

SET timezone TO 'UTC';

... 其中 timezone不是 SQL 命令,而是配置参数的名称。

参见 医生来处理这个

标准 SQL 命令

或者,也可以使用 SQL 规范 SET TIME ZONE定义的 SQL 命令。在这种语法中,一对字 TIME ZONE代替“ timezone”(实际的 SQL 命令与参数名) ,并且没有“ TO”。

SET TIME ZONE 'UTC';

这个命令和上面的命令具有相同的效果,只为当前会话设置值。要使更改永久化,请参见此 兄弟姐妹的回答

参见 医生来处理这个

时区名称

您可以指定一个 正确的时区名称,它们大多数是大陆/地区。

SET TIME ZONE 'Africa/Casablanca';

或者..。

SET TIME ZONE 'America/Montreal';

避免使用3或4个字母 缩写,如 ESTIST,因为它们既不标准化也不唯一。有关 时区名称列表,请参阅维基百科。

找到当前区域

若要查看会话的当前时区,请尝试下列语句之一。从技术上说,我们正在调用 SHOW命令来显示运行时参数。

SHOW timezone ;

或者..。

SHOW time zone ;

美国/太平洋

选择 timezone:

SELECT * FROM pg_timezone_names;

set如下例所示:

ALTER DATABASE postgres SET timezone TO 'Europe/Berlin';

在上面的语句中使用 DB 名称代替 postgres

除了前面的答案,如果你使用工具 PgAdmin III,你可以设置时区如下:

  1. 通过 工具 > 服务器配置 > postgreql.conf打开 Postgres 配置
  2. 查找条目 时区并双击以打开
  3. 更改值
  4. 重新加载服务器以应用配置更改(在顶部或通过服务播放按钮)

Postgres config in pgAdmin III

请注意,许多第三方客户端有自己的时区设置重叠任何 Postgres 服务器或会话设置。

例如,如果你使用的是“ IntelliJ IDEA 2017.3”(或 DataGrips) ,你应该将时区定义为:

‘ DB source properties’-> ‘ Advanced’tab-> ‘ VM Options’:-Duser.timezone = UTC + 06:00

否则,不管您在其他任何地方设置了什么,您都会看到“ UTC”。

也许与这个问题无关,但是我需要使用 CST,将系统时区设置为所需的 tz (America/...) ,然后在 postgreql conf 中将时区的值设置为“ localtime”,它的效果非常好,current _ time 打印出正确的时间(Ubuntu 16上的 Postgreql 9.5)

如果设置正在使用的角色的时区会怎样?

ALTER ROLE my_db_user IN DATABASE my_database
SET "TimeZone" TO 'UTC';

这个有用吗?

对于 postgres 14 + 解决方案: 在 postgreql.conf 文件中 timezone = 'Europe/Budapest'

对于 Windows 10/11用户,如果他们想要永久更改文件,文件位于:

C:\Program Files\PostgreSQL\<your-postgres-version>\data\postgresql.conf

对我来说,这是特别的:

C:\Program Files\PostgreSQL\14\data\postgresql.conf

然后在文本编辑器 ctrl-f中查找 timezone并将下列行重置为您的首选时区(通过运行 SELECT * FROM pg_timezone_names可以找到名称) :

log_timezone = 'UTC'

还有

timezone = 'UTC'

在数据库 GUI 或 CLI 中运行以下查询以重新加载配置文件。

select pg_reload_conf()

通过运行以下程序确认永久性变化:

show timezone