PostgreSQL failed IANA tz database BUG修复

背景

PostgreSQL 可以使用IANA发布的时区数据库,但是由于IANA发布的数据库中,有些定义的时区别名并没有对应的时区。

从而导致PG在解析对应别名时会报错。

# select '2016-09-02 08:00:00 NOVST'::timestamptz;
ERROR:  time zone abbreviation "novst" is not used in time zone "Asia/Novosibirsk"

查询pg_timezone_abbrevs函数返回所有的别名与时区对应关系,也会报错。

postgres=# select pg_timezone_abbrevs ();
ERROR:  time zone abbreviation "novst" is not used in time zone "Asia/Novosibirsk"

修复BUG

在PostgreSQL的BUG报告中已经有在讨论这个问题

https://www.postgresql.org/message-id/flat/20160902031551.15674.67337%40wrigleys.postgresql.org#20160902031551.15674.67337@wrigleys.postgresql.org

https://www.postgresql.org/message-id/flat/6189.1472820913%40sss.pgh.pa.us#6189.1472820913@sss.pgh.pa.us

TOM LANE提供了一个patch,可以避免出现以上问题。

wget https://www.postgresql.org/message-id/attachment/45970/allow-timezone-abbrevs-not-matching-iana-data.patch
cd postgresql-9.5.4
patch -p1 < ../allow-timezone-abbrevs-not-matching-iana-data.patch
make -j 32
make install

重启数据库,测试,如果时区别名不存在时区映射关系时,使用了本地时区。

postgres=# select '2016-09-02 08:00:00 NOVST'::timestamptz;
      timestamptz       
------------------------
 2016-09-02 09:00:00+08
(1 row)

长期来看,等PG的内核修复。

参考

https://www.postgresql.org/message-id/flat/20160902031551.15674.67337%40wrigleys.postgresql.org#20160902031551.15674.67337@wrigleys.postgresql.org

https://www.postgresql.org/message-id/flat/6189.1472820913%40sss.pgh.pa.us#6189.1472820913@sss.pgh.pa.us

Count

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值