E.31. 版本 9.2.20 #
发行日期:. 2017-02-09
本次发布包含对 9.2.19 的多方面修复。有关 9.2 大版本中新特性的信息,请参见第 E.51 节。.
E.31.1. 迁移到版本 9.2.20
对于运行 9.2.X 的用户,不需要进行转储/恢复。
不过,如果你的安装受到下面第一条变更日志条目所述 bug 的影响,更新之后你可能需要采取行动修复损坏的索引。
不过,如果你是从早于 9.2.11 的版本升级,请参见第 E.40 节。
E.31.2. 变更
修复可能导致用
CREATE INDEX CONCURRENTLY构建的索引损坏的竞态条件(Pavan Deolasee、Tom Lane)如果
CREATE INDEX CONCURRENTLY被用于构建一个依赖于先前未被索引的列的索引,那么与CREATE INDEX命令并发运行的事务所更新的行可能收到错误的索引条目。如果怀疑这可能已发生,最可靠的解决方案是在安装此更新后重建受影响的索引。无条件地为未记录表的 “init fork” 写 WAL 日志(Michael Paquier)
此前当wal_level =
minimum时跳过这一步,但实际上即使在这种情况下也需要它,以确保未记录表在崩溃后被正确重置为空。修复重新读取段时 WAL 页头的校验(Takayuki Tsunakawa、Amit Kapila)
在极端情况下,恢复期间可能报告虚假的 “out-of-sequence TLI” 错误。
如果统计收集器在热备期间死亡,重启它(Takayuki Tsunakawa)
热备等待冲突查询时检查中断(Simon Riggs)
避免边界情况下自动清理启动器的不断重启(Amit Khandekar)
此修复避免了自动清理名义上关闭且有一些需要冻结的表,但所有这种表都已被自动清理工作者处理时的问题。
修复扩展成员对象何时可被删除的检查(Tom Lane)
扩展升级脚本应当能删除成员对象,但对序列列的序列(可能还有其他情况)这不被允许。
确保
ALTER TABLE重建索引时保留索引表空间分配(Tom Lane、Michael Paquier)此前,default_tablespace的非默认设置可能导致索引损坏。
如果被引用关系有未决的触发器事件,防止删除外键约束(Tom Lane)
这避免了 “could not find trigger
NNN” 或 “relationNNNhas no triggers” 错误。修复带 OID 的表通过
ALTER TABLE ... INHERIT关联到带 OID 的父表时 OID 列的处理(Amit Langote)这种情况下 OID 列应当与普通用户列同等对待,但没有,导致之后继承更改中的奇怪行为。
在报告约束违反失败之前检查可序列化冲突(Thomas Munro)
使用可序列化事务隔离时,希望任何因并发事务导致的错误都表现为序列化失败,从而提示应用重试可能成功。不幸的是,对并发插入导致的重复键失败这不能可靠发生。此更改确保如果应用在事务中早些时候显式检查过冲突键的存在(且未找到),这种错误将被报告为序列化错误。
确保多行
VALUES构造的列 typmod 被准确确定(Tom Lane)这修复了列的第一个值有可确定的 typmod(如
varchar值的长度)但后面的值不共享同一限制时发生的问题。对 Unicode 字符串末尾未完成的 Unicode 代理项对抛出错误(Tom Lane)
通常 Unicode 代理项前导字符后面必须跟 Unicode 代理项后随字符,但当前导字符是 Unicode 字符串字面量(
U&'...')或 Unicode 标识符(U&"...")的最后一个字符时漏掉了这一检查。确保纯否定的文本搜索查询(如
!foo)匹配空的tsvector(Tom Dunstan)GIN 索引搜索能找到这种匹配,但顺序扫描或 GiST 索引搜索不能。
防止
ts_rewrite()用空查询替换非顶层子树时崩溃(Artur Zakirov)修复
ts_rewrite()的性能问题(Tom Lane)修复
ts_rewrite()对嵌套 NOT 操作符的处理(Tom Lane)修复
array_fill()正确处理空数组(Tom Lane)修复
quote_literal_cstr()中的一字节缓冲区越界(Heikki Linnakangas)只有当输入完全由单引号和/或反斜线组成时才会发生越界。
防止
pg_start_backup()和pg_stop_backup()的多次调用并发运行(Michael Paquier)这避免了有人试图并行运行这些函数时的断言失败以及可能更糟的事情。
避免丢弃并非真正无操作的
interval到interval强制转换(Tom Lane)某些情况下,本应导致清零低阶
interval字段的强制转换被错误地当作无操作而丢弃。例如从INTERVAL MONTH转换到INTERVAL YEAR未能清除月份字段。修复 pg_dump 转储使用内建函数的用户定义强制转换和转换(Stephen Frost)
修复包含 WAL 文件时备库服务器上可能的 pg_basebackup 失败(Amit Kapila、Robert Haas)
确保我们为 PL/Python 创建的 Python 异常对象被正确引用计数(Rafa de la Torre、Tom Lane)
这避免了对象在 Python 垃圾回收周期发生之后被使用时的失败。
修复 PL/Tcl 支持以
.tupno为列名的表上的触发器(Tom Lane)这与 PL/Tcl 的
spi_exec和spi_execp命令(以前未写入文档)的行为一致,即只在不存在该名字的真实列时才插入幻.tupno列。允许
~/.pgpass文件中的 DOS 风格行尾,即使在 Unix 上也一样(Vik Fearing)这一更改简化了在 Unix 和 Windows 机器之间使用同一密码文件。
修复 ecpg 被给定以点结尾的文件名时的一字节缓冲区越界(Takayuki Tsunakawa)
修复 psql 对
ALTER DEFAULT PRIVILEGES的 Tab 补全(Gilles Darold、Stephen Frost)在 psql 中,把
PAGER环境变量的空或全空白设置当作“不使用分页器”(Tom Lane)此前这种设置导致本应发给分页器的输出完全消失。
改进
contrib/dblink对低层 libpq 错误(如内存不足)的报告(Joe Conway)在 Windows 上,确保环境变量更改被传播到以调试选项构建的 DLL(Christian Ullrich)
把我们的时区库副本与 IANA tzcode2016j 同步(Tom Lane)
这修复了若干问题,最显著的是当目标目录不支持硬链接时区数据安装失败。
更新时区数据文件到 tzdata 版本 2016j,涉及北塞浦路斯(新增时区 Asia/Famagusta)、俄罗斯(新增时区 Europe/Saratov)、汤加和 Antarctica/Casey 的夏令时法规变更。还有意大利、哈萨克斯坦、马耳他和巴勒斯坦的历史修正。汤加改用首选数字时区缩写。