E.29. 版本 9.3.2
发布日期: 2013-12-05
这个版本包含各种自9.3.1以来的修复。关于9.3主版本的新特性信息, 请查看第 E.31 节。
E.29.1. 迁移到版本9.3.2
运行9.3.X版本的用户不需要转储/恢复。
不过,这个版本纠正了一些潜在的数据损坏问题。查看下面的前三条修改日志项, 找出你的安装是否受到了影响,和受到影响后要采取的步骤。
另外,如果你是从一个早于9.3.1的版本升级而来,请查看第 E.30 节。
E.29.2. 修改列表
-
修复VACUUM的测试,查看它是否可以更新relfrozenxid (Andres Freund)
在某些情况下,VACUUM(手动或者自动)会不正确的增加一个表的 relfrozenxid值,允许元组逃过冻结, 导致一旦执行了2^31个事务,这些行就变得不可见。数据丢失的概率比较低, 因为在实际丢失数据发生之前需要发生多次错误增加。 在9.2.0及更高版本中,数据丢失的可能性要稍高些, 并且由于这个bug可能会得到"could not Access status of transaction"错误。 从版本9.0.4或8.4.8或更早版本升级而来的用户没有受到影响, 但是所有后来的版本都包含该bug。
这个问题可以通过在升级之后,将vacuum_freeze_table_age 设置为0,在所有数据库中清理所有表来改善。这将修复任何潜在的损坏, 但是不能修复所有已经存在的数据错误。不过, 一个在它的生命期中执行了少于2^31个更新(使用SELECT txid_current() < 2^31 检查)事务的安装,在执行这个清理之后,可以假设是安全的。
-
修复MultiXactId冻结中的多个bug (Andres Freund,Álvaro Herrera)
这些bug会导致"不能访问事务的状态"错误,或者复制或使行消失。 从9.3.0之前的版本升级而来的用户没有受到影响。
这个问题可以通过在升级之后,将vacuum_freeze_table_age 设置为0,在所有数据库中清理所有表来改善。这将修复任何潜在的损坏, 但是不能修复所有已经存在的数据错误。
作为一个单独的问题,这些bug还会导致备用服务器丢失与主服务器的同步, 因此显示数据不在主服务器中的错误。因此, 建议9.3.0和9.3.1版本的备用服务器在升级之后,从主服务器重新拷贝 (例如,使用一个新的基础备份)。
-
修复热备启动期间pg_clog和pg_subtrans的初始化 (Andres Freund, Heikki Linnakangas)
这个bug会导致备用服务器开始接受热备份查询时它们上面的数据丢失, 通过标记已提交事务为未提交。这种损坏的可能性比较小, 除非是在备用服务器启动的时候,主服务器自最后一个检查点以来已经执行了许多的更新事务。 表现包括丢失行、应该已经删除了的行仍然可见和更新了的行的老版本仍然可见。
这个bug是在版本9.3.0、9.2.5、9.1.10和9.0.14中引入的。 运行较早版本的备用服务器没有风险。 建议曾经运行过有错误版本的备用服务器在升级后重新克隆主服务器 (例如,使用一个新的基础备份)。
-
修复更新链遍历中的多个bug (Andres Freund, Álvaro Herrera)
这些bug会导致不正确的行为,比如在并发更新时锁定甚至更新错误的行。 虚假的"unable to fetch updated version of tuple"错误也是有可能的。
-
修复快速路径锁定中的悬挂指针问题 (Tom Lane)
这会导致共享内存中锁定数据结构的损坏,引起"lock already held" 和其他奇怪的错误。
-
修复超时管理中的各种竞态条件 (Tom Lane)
这些错误会导致服务器进程因为阻塞的SIGALRM和/或SIGINT变得无反应。
-
在WAL重放期间截断pg_multixact内容 (Andres Freund)
这避免了备用服务器上不断增长的磁盘空间消耗。
-
确保反概括VACUUM将一个页面看做已经扫描了的, 当它只是验证了没有元组需要冻结时 (Sergey Burladyan, Jeff Janes)
这个bug会导致未能增加relfrozenxid, 所以将仍然认为该表需要另一个反概括清理。在最坏的情况下, 数据库甚至会关闭以阻止概括。
-
为MultiXactIds修复全表清理请求机制 (Andres Freund)
这个bug会导致大量无用的自动清理活动。
-
修复GIN索引发布树页面删除中的竞态条件 (Heikki Linnakangas)
这会导致瞬间的错误回复或查询失败。
修复SP-GiST索引创建期间的"unexpected spgdoinsert() failure"错误 (Teodor Sigaev)
修复物化视图中的各种bug (Kevin Grittner, Andres Freund)
-
重新允许重复的表别名,如果它们是在别名的JOIN中 (Tom Lane)
历史上的PostgreSQL已经接受了像
SELECT ... FROM tab1 x CROSS JOIN (tab2 x CROSS JOIN tab3 y) z
这样的查询,尽管SQL标准的严格禁止表别名x的重复使用。 9.3.0中一个被误导的修改导致它拒绝一些这样的以前接受的情况。 恢复以前的行为。
-
避免压缩一个SELECT列表中包含一个包含在子SELECT 中的不稳定函数的子查询 (Tom Lane)
这避免了由于额外评估该不稳定函数引起的意外结果。
-
修复规划器对非简单变量子查询输出嵌套在外连接中的处理 (Tom Lane)
这个错误会导致在JOIN语法中包含多级别子查询的查询的错误规划。
修复相同的非严格表达式在多个WHERE和外JOIN 相等子句中出现时不正确的规划 (Tom Lane)
修复整行引用子查询的规划器崩溃 (Tom Lane)
-
修复为继承树不正确的生成优化的MIN()/MAX()规划 (Tom Lane)
在MIN()/MAX()参数是表达式而不是简单的变量的情况下,该规划会失败。
修复临时文件的过早删除 (Andres Freund)
-
阻止打印范围值时事务内部的内存泄露 (Tom Lane)
该修复实际上改正任何数据类型输出函数中的瞬间内存泄露, 但是唯一知道的有重要问题的是范围类型。
修复重新加载配置文件时的内存泄露 (Heikki Linnakangas, Hari Babu)
阻止在NOT NULL和CHECK约束违反消息中不正确的显示删除了的字段 (Michael Paquier and Tom Lane)
-
允许窗口函数有缺省的参数和命名参数注释 (Tom Lane)
以前这些情况有可能崩溃。
-
当漂亮的打印规则和视图时,抑制每一行上面的尾随空白 (Tom Lane)
9.3.0比以前的版本在更多的情况下产生这样的空白。要减少意外的行为变化, 在所有情况下都抑制不必要的空白。
修复规则打印中可能读取过去的内存 (Peter Eisentraut)
-
修复int2vector和oidvector值的数组切片 (Tom Lane)
这种类型的表达式现在隐式的转换成普通的int2或oid数组。
在转换空的hstore值到json时,返回一个有效的JSON值 (Oskari Saarenmaa)
-
修复使用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)
以前,生成的脚本在恢复期间会失败。
修复pg_isready,以正确的处理它的-d选项 (Fabrízio de Royes Mello and Fujii Masao)
-
修复pg_receivexlog中WAL文件名的解析 (Heikki Linnakangas)
这个错误使得pg_receivexlog在停止之后, 一旦已经写入了至少4GB的WAL,则不能重启流。
在pg_upgrade中正确的报告超出磁盘空间失败 (Peter Eisentraut)
让ecpg对引用的游标名搜索大小写敏感 (Zoltán Böszörményi)
修复ecpg对varchar声明的变量列表的处理 (Zoltán Böszörményi)
让contrib/lo防卫不正确的触发器定义 (Marc Cousin)
更新时区数据文件到tzdata版本2013h, 因为DST规律在Argentina、Brazil、Jordan、Libya、Liechtenstein、 Morocco和Palestine发生了改变。另外,Indonesia 的新时区缩写WIB、WIT、WITA。