postgres默认时区

时间:2011-07-12 11:55:46

标签: postgresql

我安装了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并设置timezone = GMT然后运行重启但没有改变。

我认为它会使用服务器时区的任何想法,但显然不是吗?!

解!: 我之前确实设置了格林尼治标准时间,它落后了一个小时......之后搜索结果我需要将它设置为欧洲/伦敦。考虑到英国夏季的+1小时,格林威治标准时间没有!

8 个答案:

答案 0 :(得分:82)

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

请参阅the doc

set timezone TO 'GMT';

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

SET TIME ZONE 'UTC';

该文件解释了差异:

  

SET TIME ZONE扩展了SQL标准中定义的语法。该标准仅允许数字时区偏移,而PostgreSQL允许更灵活的时区规范。所有其他SET功能都是PostgreSQL扩展。

答案 1 :(得分:50)

从以下位置选择时区:

SELECT * FROM pg_timezone_names;

并设置示例:

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

使用您的数据库名称。

答案 2 :(得分:43)

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

1 .- 在/usr/share/postgresql/9.1/的“timezones”文件夹中搜索适当的文件,在我的情况下将是“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 .- 重新启动Postgres

答案 3 :(得分:28)

accepted answer Muhammad Usama是正确的。

配置参数名称

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

SET timezone TO 'UTC';

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

请参阅the doc for this

标准SQL命令

或者,您可以使用SQL规范定义的SQL命令:SET TIME ZONE。在这个语法中,一对单词TIME ZONE替换“timezone”(实际SQL命令与参数名称),并且没有“TO”。

SET TIME ZONE 'UTC';

此命令和上面的命令都具有相同的效果,仅设置当前会话的值。要使更改成为永久更改,请参阅此sibling answer

请参阅the doc for this

时区名称

您可以指定proper time zone name。其中大部分是大陆/地区。

SET TIME ZONE 'Africa/Casablanca';

...或...

SET TIME ZONE 'America/Montreal';

避免使用ESTIST等3或4个字母缩写,因为它们既不是标准也不是唯一。

获取当前区域

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

SHOW timezone ;

...或...

SHOW time zone ;
  

US /太平洋

答案 4 :(得分:8)

除了之前的答案,如果您使用工具pgAdmin III,您可以按如下方式设置时区:

  1. 通过工具>打开Postgres配置服务器配置> postgresql.conf中
  2. 查找条目时区,然后双击打开
  3. 更改值
  4. 重新加载服务器以应用配置更改(顶部或通过服务播放按钮)
  5. Postgres config in pgAdmin III

答案 5 :(得分:1)

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

E.g。如果您使用的是“IntelliJ IDEA 2017.3”(或DataGrips),则应将时区定义为:

'数据库源属性' - > “高级”标签 - > 'VM Options': - Duser.timezone = UTC + 06:00

否则,无论你在其他任何地方设置了什么,你都会看到'UTC'。

答案 6 :(得分:0)

可能与问题无关,但我需要使用CST,将系统时区设置为所需的tz(America / ...),然后在postgresql conf中将时区的值设置为' localtime&# 39;它起到了魅力,current_time打印的时机(Ubuntu 16上的Postgresql 9.5)

答案 7 :(得分:0)

如果您设置所使用角色的时区会怎样?

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

这有什么用吗?