如何更新PostgreSQL时区数据库

pdtvr36n  于 2023-10-18  发布在  PostgreSQL
关注(0)|答案(3)|浏览(141)

我在服务器上使用PostgreSQL 9.5版本。随着时间的推移,时区数据库显然变得过时。
例如,根据icann mailing list,俄罗斯的沃尔戈格勒从+3上升到+4。然而,在我的数据库中,它看起来仍然与俄罗斯莫斯科处于同一时区:

SELECT TIMESTAMP '2001-02-16 20:38:40' AT TIME ZONE 'Europe/Moscow';
        timezone        
------------------------
 2001-02-16 20:38:40+03

SELECT TIMESTAMP '2001-02-16 20:38:40' AT TIME ZONE 'Europe/Volgograd';
        timezone        
------------------------
 2001-02-16 20:38:40+03

有没有一种方法可以只更新时区数据库,而不需要更新或重新安装整个PostgreSQL?

xj3cbfub

xj3cbfub1#

你可以设置一个时区到你的数据库,例如:

alter DATABASE your_dabase  set timezone  = '+N' --number of timezone

或者可以使用alter system更改服务器中的所有数据库:

alter system set timezone to '+N'; --number of timezone, reload configuration

问候

4c8rllxm

4c8rllxm2#

根据邮件列表上的this thread,如果PostgreSQL是用--with-system-tzdata编译的,那么这只是一个更新系统tzdata文件的问题(通常使用发行版的包管理器)。您可以通过运行pg_config --configure来检查它是否是使用该选项编译的,但它必须是与服务器一起构建的特定pg_config二进制文件。
如果它没有使用该选项编译,那么Postgres会使用一个打包的(可能已经过时的)tzdata副本,该副本似乎位于share/timezone/中(在安装目录中),并且显然可以在zic实用程序的帮助下手动更新。
在这两种情况下,都声称现有会话无法读取新数据,但新会话可以。也许值得重新启动服务器无论如何作为预防措施。

b5buobof

b5buobof3#

当服务器启动时,pg_timezone_names视图被填充,它递归地从<your Postgres dir>/src/timezone读取时区文件,它们用于为视图提供日期。
1.如果您可以将时区文件<your Postgres dir> /src/timezone/data/tzdata.zi替换为时区的最新更新,
那么这可能会解决问题。
1.如果您可以更新View pg_timezone_names
如果我们使用云版本,我们无法替换或更新这些文件,因为所有内容都由Infastrcture管理

相关问题