翻译:亭亭小次郎 ... 新闻稿采编:2017-03-03 14:37:01+08

软件发布:2017-02-12

PostgreSQL全球开发组已经发布了该数据库系统的所有支持版本的更新,包括9.6.2,9.5.6,9.4.11,9.3.16和9.2.20。此版本包括防止索引构建和某些预写日志重播情况下的数据损坏问题的修复程序,下面将详细介绍。它还包含在过去三个月内其他错误报告75个补丁。

用户可以计划在下次计划的停机时间应用此更新。

用CREATE INDEX CONCURRENTLY造成损坏

如果在以前没有建立索引的列上调用CREATE INDEX CONCURRENTLY,则存在竞争条件,则在CREATE INDEX CONCURRENTLY命令同时运行的事务更新的行可能已被错误索引。

如果您怀疑这可能发生,最可靠的解决方案是在安装此更新后重建受影响的索引。

这个问题存在于PostgreSQL的9.2,9.3,9.4,9.5和9.6系列中。

修复了可见性和预写日志的稳定性

这些版本包含了几个修复,以提高可见数据和WAL日志记录的稳定性,我们这里强调一下。

在此版本之前,当用于目录扫描的特殊快照当前可用时,数据可能会被真空操作过早删除。具体来说,真空操作不会知道这个特殊快照的最早的xmin。错误将与一个消息,如:

"cache lookup failed for relation 1255"

此版本确保vacuum操作将考虑目录扫描快照。

此外,有几个修复程序来提高预写日志的稳定性,包括:

* BRIN索引WAL日志记录的修复,其中重放可能使BRIN索引的一部分无用并需要重新计算
* 修复重置未记录表的问,其中将在`wal_level = minimal`设置下创建WAL日志,并且在崩溃后重放时,该表将不会被正确重置
* 修复WAL页头验证,在重新读取段时,在恢复期间会报告“out-of-sequenceTLI” 错误段

这些问题存在于9.6系列的PostgreSQL版本中,也可能存在于9.2,9.3,9.4和9.5系列中。

错误修复和改进

此更新还修复了在过去几个月中报告的一些错误。其中一些问题只影响9.6系列,但许多影响所有支持的版本。在此版本中提供了超过75个修订,包括:

  • 在热备机(hot standby)模式下操作的几个修复
  • 不允许在synchronous_standby_names中将num_sync字段设置为零
  • 不要根据用户的连接限制计算后台工作进程
  • 修复检查可以删除扩展成员对象的时间
  • 修复扩展成员对象的初始权限的跟踪,以便它可以正确地与ALTER EXTENSION … ADD / DROP一起使用
  • 几个vacuum和autovacuum的修复
  • 修复在尝试应用新的视图选项之前,CREATE OR REPLACE VIEW以更新视图查询
  • 确保ALTER TABLE在重建索引时保留索引表空间分配
  • 查询计划器的几个修复程序,包括外部表和CTE的修复程序
  • 围绕全文搜索功能的几个修复程序,以提高搜索的准确性和性能
  • 几个数组函数的几个修复和性能改进
  • 围绕特定ALTER TABLE操作的外键约束与触发器函数的交互的几个修复
  • 删除返回不正确数据的日期/时间数据类型的优化
  • 修正了将视图重排不正确地用作常规表重排
  • 修复”target lists can have at most N entries”问题,在使用ON CONFLICT与宽表时修正不正确的报告
  • 修复“query provides a value for a dropped column”的错误信息,提供了一个值“INSERT或UPDATE期间在具有删除列的表上
  • 阻止UPDATE源表达式中的foo.*的多列扩展
  • 确保为多行VALUES结构准确地确定列类型
  • psql 命令行工具的几个修复程序
  • 防止pg_start_backup()和pg_stop_backup()的多个调用同时运行
  • pg_dump,pg_restore和pg_basebackup的几个修复,包括备用服务器上可能的pg_basebackup故障,包括WAL文件
  • 并行工作的几个修复和并行查询的计划,包括在重新扫描期间并行查询可用的工作程序数量减少时修复崩溃
  • 几个PL/pgSQL,PL/Python和PL/Tcl的修复
  • contrib模块的几个修复
  • 在〜/.pgpass文件中允许DOS样式的行尾,甚至在Unix上

更新时区数据文件到tzdata发布2016j为北Cyprus(增加一个新的区域Asia/Famagusta),俄罗斯(增加一个新的区域Europe/Saratov),Tonga和Antarctica/Casey的DST历史变化。意大利,哈萨克斯坦,马耳他和巴勒斯坦的历史修正。切换到喜欢 Tonga 的数字区缩写。

更新

所有PostgreSQL更新版本都是累积的。如果只是小版本号一样,用户不需要转储和重新加载其数据库,也不需要使用pg_upgrade来更新版本; 只需要简单地关闭PostgreSQL数据库并更新其二进制文件。

如果你受到上述CREATE INDEX CONCURRENTLY错误的影响,你重建索引。下面是一个如何在生产系统中重建索引而不会失去使用旧索引的示例:

CREATE INDEX CONCURRENTLY new_index_name ON table_name (column_name);
DROP INDEX CONCURRENTLY old_index_name;
ALTER INDEX new_index_name RENAME TO old_index_name;

请注意,使用此方法意味着你将短暂拥有相同索引的两个副本,因此,如果磁盘空间是一个问题,你可能需要采取其他方法。

如果用户做大版本更新,或者跳过一个或多个更新版本,可能需要运行其他更新后步骤; 有关详细信息,请参阅早期版本的发行说明。

链接:

© 2010 PostgreSQL中文社区