E.116. 版本 9.0.15

E.116.1. 迁移到版本 9.0.15
E.116.2. 修改列表

发布日期:. 2013-12-05

这个版本包含各种自9.0.14以来的修复。想要获得关于9.0主版本的新特性信息, 请参阅第 E.131 节

E.116.1. 迁移到版本 9.0.15

运行9.0.X的系统不需要转储/恢复。

不过,这个版本纠正了一些潜在的数据损坏问题。查看下面的前两个修改列表项, 找出您的安装是否受到了影响,和如果受到影响要采取的步骤。

另外,如果你是从一个早于9.0.13的版本升级而来,请参阅第 E.118 节

E.116.2. 修改列表

  • 修复VACUUM的测试, 查看它是否可以更新relfrozenxid (Andres Freund)

    在某些情况下VACUUM(手动或自动)错误的增加一个表的 relfrozenxid值,允许元组逃过冻结, 导致一旦执行了2^31个事务,这些行就变得不可见。数据丢失的概率比较低, 因为在实际丢失数据发生之前需要发生多次错误增加。 从版本9.0.4或9.4.8或更早版本升级而来的用户没有受到影响, 但是所有后来的版本都包含该bug。

    这个问题可以通过在升级之后,将vacuum_freeze_table_age 设置为0,在所有数据库中清理所有表来改善。这将修复任何潜在的损坏, 但是不能修复所有已经存在的数据错误。不过, 一个在它的生命期中执行了少于2^31个更新(使用SELECT txid_current() < 2^31 检查)事务的安装,在执行这个清理之后,可以假设是安全的。

  • 修复热备启动期间pg_clogpg_subtrans的安装 (Andres Freund, Heikki Linnakangas)

    这个bug会导致备用服务器开始接受热备份查询时它们上面的数据丢失, 通过标记已提交事务为未提交。这种损坏的可能性比较小, 除非是在备用服务器启动的时候,主服务器自最后一个检查点以来已经执行了许多的更新事务。 表现包括丢失行、应该已经删除了的行仍然可见和更新了的行的老版本仍然可见。

    这个bug是在版本9.3.0、9.2.5、9.1.10和9.0.14中引入的。 运行较早版本的备用服务器没有风险。 建议曾经运行过有错误版本的备用服务器在升级后重新克隆主服务器 (例如,使用一个新的基础备份)。

  • 在WAL重放期间截断pg_multixact内容 (Andres Freund)

    这避免了备用服务器上不断增长的磁盘空间消耗。

  • 修复GIN索引发布树页面删除中的竞态条件 (Heikki Linnakangas)

    这会导致瞬间的错误回复或查询失败。

  • 避免压缩一个SELECT列表中包含一个包含在子SELECT 中的不稳定函数的子查询 (Tom Lane)

    这避免了由于额外评估该不稳定函数引起的意外结果。

  • 修复规划器对非简单变量子查询输出嵌套在外连接中的处理 (Tom Lane)

    这个错误会导致在JOIN语法中包含多级别子查询的查询的错误规划。

  • 修复临时文件的过早删除 (Andres Freund)

  • 修复规则打印中可能读取过去的内存 (Peter Eisentraut)

  • 修复int2vectoroidvector值的数组切片 (Tom Lane)

    这种类型的表达式现在隐式的转换成普通的int2oid数组。

  • 修复使用SQL标准、简单GMT偏移时区时的错误行为 (Tom Lane)

    在某些情况下,系统会在它应该使用在简单偏移被选择之前盛行的常规时区设置时, 使用了简单GMT偏移值。这个修改也使timeofday 函数遵守简单GMT偏移时区。

  • 在记录Windows错误代码的翻译时阻止可能的错误行为 (Tom Lane)

  • pg_ctl中正确的引用生成的命令行 (Naoya Anzai and Tom Lane)

    这个修复仅适用于Windows。

  • 修复pg_dumpall,使其在源数据库通过ALTER DATABASE SET 设置default_transaction_read_only 时工作 (Kevin Grittner)

    以前,生成的脚本在恢复期间会失败。

  • 修复ecpgvarchar声明的变量列表的处理 (Zoltán Böszörményi)

  • contrib/lo防卫不正确的触发器定义 (Marc Cousin)

  • 更新时区数据文件到tzdata版本2013h, 因为DST规律在Argentina、Brazil、Jordan、Libya、Liechtenstein、 Morocco和Palestine发生了改变。另外,Indonesia 的新时区缩写WIB、WIT、WITA。