我在服务器上使用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?
3条答案
按热度按时间xj3cbfub1#
你可以设置一个时区到你的数据库,例如:
或者可以使用alter system更改服务器中的所有数据库:
问候
4c8rllxm2#
根据邮件列表上的this thread,如果PostgreSQL是用
--with-system-tzdata
编译的,那么这只是一个更新系统tzdata文件的问题(通常使用发行版的包管理器)。您可以通过运行pg_config --configure
来检查它是否是使用该选项编译的,但它必须是与服务器一起构建的特定pg_config
二进制文件。如果它没有使用该选项编译,那么Postgres会使用一个打包的(可能已经过时的)tzdata副本,该副本似乎位于
share/timezone/
中(在安装目录中),并且显然可以在zic
实用程序的帮助下手动更新。在这两种情况下,都声称现有会话无法读取新数据,但新会话可以。也许值得重新启动服务器无论如何作为预防措施。
b5buobof3#
当服务器启动时,
pg_timezone_names
视图被填充,它递归地从<your Postgres dir>/src/timezone
读取时区文件,它们用于为视图提供日期。1.如果您可以将时区文件
<your Postgres dir> /src/timezone/data/tzdata.zi
替换为时区的最新更新,那么这可能会解决问题。
1.如果您可以更新View
pg_timezone_names
如果我们使用云版本,我们无法替换或更新这些文件,因为所有内容都由Infastrcture管理