zl程序教程

您现在的位置是:首页 >  其他

当前栏目

PostgreSQL failed IANA tz database BUG修复

2023-09-14 09:00:26 时间

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


PostgreSQL自身的物化视图没有MVLOG,也就是说,刷新的时候是VIEW定义产生的记录与MV已刷新的记录进行比对,进行增量更新的过程。