我安装了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小时,格林威治标准时间没有!
答案 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命令: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';
避免使用EST
或IST
等3或4个字母缩写,因为它们既不是标准也不是唯一。
要查看会话的当前时区,请尝试以下任一语句。从技术上讲,我们调用SHOW
命令来显示运行时参数。
SHOW timezone ;
...或...
SHOW time zone ;
US /太平洋
答案 4 :(得分:8)
除了之前的答案,如果您使用工具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';
这有什么用吗?