我安装了PostgreSQL 9,它显示的时间比服务器时间晚1小时.
跑步PostgreSQL 9节目:Select NOW()
服务器日期显示:Tue Jul 12 12:51:40 BST 2011
落后1小时,但phppgadmin显示的时区为:TimeZone Etc/GMT0
我试过进入postgresql.conf并设置timezone = GMT然后运行重启但没有改变.
我认为它会使用服务器时区的任何想法,但显然不是吗?!
解决方案!:之前我确实设置了GMT,它落后了一个小时......之后搜索结果我需要将它设置为欧洲/伦敦.这考虑到英国夏季的+1小时,GMT没有!
Muh*_*ama 96
时区是会话参数.因此,您可以更改当前会话的时区.
见文档.
set timezone TO 'GMT';
Run Code Online (Sandbox Code Playgroud)
或者,更严格地遵循SQL标准,使用该SET TIME ZONE命令.注意"TIME ZONE"的两个单词,其中上面的代码使用单个单词"timezone".
SET TIME ZONE 'UTC';
Run Code Online (Sandbox Code Playgroud)
该文件解释了差异:
SET TIME ZONE扩展了SQL标准中定义的语法.该标准仅允许数字时区偏移,而PostgreSQL允许更灵活的时区规范.所有其他SET功能都是PostgreSQL扩展.
Iur*_*ilo 76
从以下位置选择时区:
SELECT * FROM pg_timezone_names;
Run Code Online (Sandbox Code Playgroud)
并设置示例:
ALTER DATABASE postgres SET timezone TO 'Europe/Berlin';
Run Code Online (Sandbox Code Playgroud)
使用您的数据库名称.
gue*_*los 44
要在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)
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
3.-重启Postgres
Bas*_*que 32
该接受的答案由穆罕默德·乌萨马·本是正确的.
该答案显示了如何使用以下内容设置Postgres特定的配置参数:
SET timezone TO 'UTC';
Run Code Online (Sandbox Code Playgroud)
...其中timezone不是SQL命令,它是配置参数的名称.
请参阅文档.
或者,您可以使用SQL规范定义的SQL命令:SET TIME ZONE.在这种语法中,一对单词TIME ZONE取代"timezone"(实际SQL命令与参数名称),并且没有"TO".
SET TIME ZONE 'UTC';
Run Code Online (Sandbox Code Playgroud)
此命令和上面的命令都具有相同的效果,仅设置当前会话的值.要使更改成为永久更改,请参阅此兄弟答案.
请参阅文档.
您可以指定适当的时区名称.其中大部分是大陆/地区.
SET TIME ZONE 'Africa/Casablanca';
Run Code Online (Sandbox Code Playgroud)
…要么…
SET TIME ZONE 'America/Montreal';
Run Code Online (Sandbox Code Playgroud)
避免使用3或4个字母的缩写,例如EST或IST它们既不标准也不唯一.
要查看会话的当前时区,请尝试以下任一语句.从技术上讲,我们调用SHOW命令来显示运行时参数.
SHOW timezone ;
Run Code Online (Sandbox Code Playgroud)
…要么…
SHOW time zone ;
Run Code Online (Sandbox Code Playgroud)
美国/太平洋
除了之前的答案,如果您使用工具pgAdmin III,您可以按如下方式设置时区:
请注意,许多第三方客户端都有自己的时区设置,与任何 Postgres 服务器和/或会话设置重叠。
例如,如果您使用“IntelliJ IDEA 2017.3”(或 DataGrips),则应将时区定义为:
“数据库源属性”->“高级”选项卡->“虚拟机选项”:-Duser.timezone=UTC+06:00
否则,无论您在其他地方设置了什么,您都会看到“UTC”。
对于想要永久更改它的 Windows 10/11 用户,该文件位于:
C:\Program Files\PostgreSQL\<your-postgres-version>\data\postgresql.conf
Run Code Online (Sandbox Code Playgroud)
对我来说具体是:
C:\Program Files\PostgreSQL\14\data\postgresql.conf
Run Code Online (Sandbox Code Playgroud)
然后在文本编辑器中ctrl-f查找timezone以下行并将其重置为您的首选时区(可以通过运行找到名称SELECT * FROM pg_timezone_names):
log_timezone = 'UTC'
Run Code Online (Sandbox Code Playgroud)
和
timezone = 'UTC'
Run Code Online (Sandbox Code Playgroud)
在数据库 GUI 或 CLI 中运行以下查询来重新加载配置文件。
select pg_reload_conf()
Run Code Online (Sandbox Code Playgroud)
通过运行以下命令确认永久更改:
show timezone
Run Code Online (Sandbox Code Playgroud)