E.62. 版本 9.1.14 #
发行日期:. 2014-07-24
本次发布包含对 9.1.13 的多方面修复。有关 9.1 大版本中新特性的信息,请参见第 E.76 节。.
E.62.1. 迁移到版本 9.1.14
对于运行 9.1.X 的用户,不需要进行转储/恢复。
不过,本版本纠正了某些 GiST 索引的索引损坏问题。请参见下面第一条变更日志,以确认你的安装是否受影响以及应采取的步骤。
不过,如果你是从早于 9.1.11 的版本升级,请参见第 E.65 节。
E.62.2. 变更
正确初始化
contrib/btree_gist在bit列上索引的填充字节(Heikki Linnakangas)这一错误可能导致本应比较相等的值不被视为相等,从而产生错误的查询结果。在
bit或bit varying列上建有 GiST 索引的用户,在安装此更新后应对这些索引执行REINDEX。在删除 GIN 列表页时防止残缺页(torn page)(Heikki Linnakangas)
此修复可防止在页面更新写入磁盘期间发生系统崩溃时可能出现的索引损坏。
在从 WAL 重放更新时不清除 GiST 索引页的右链接(Heikki Linnakangas)
这一错误可能导致热备中执行的 GiST 索引扫描出现瞬时错误的结果。
修复hot_standby_feedback被动态关闭时反馈状态的处理(Simon Riggs)
修复嵌套调用
ReceiveSharedInvalidMessages期间缓存失效可能不正确的问题(Andres Freund)修复对从带继承子表的表读取的子查询执行
UNION ALL时规划器报 “could not find pathkey item to sort” 失败的问题(Tom Lane)当子查询的目标列表中存在集合返回函数时,不再假定其输出是唯一的(David Rowley)
这一疏忽可能导致诸如
WHERE x IN (SELECT y, generate_series(1,10) FROM t GROUP BY y)之类的构造被错误优化。修复未能对结构化类型的组合元素中的字段执行解 TOAST 的错误(Tom Lane)
这纠正了 TOAST 指针可能未经解引用就被复制到其他表的情况。如果原始数据随后被删除,当这个已悬空的指针被使用时,会导致诸如 “missing chunk number 0 for toast value ...” 之类的错误。
修复对 Append 计划节点输出的整行引用导致 “record type has not been registered” 失败的问题(Tom Lane)
修复在回卷游标时调用用户定义函数可能崩溃的问题(Tom Lane)
修复为
FROM中的函数求值参数时查询级内存泄漏的问题(Tom Lane)修复正则表达式处理中的会话级内存泄漏(Tom Lane、Arthur O'Dwyer、Greg Stark)
修复
hungarian.stop中的数据编码错误(Tom Lane)防止在default_with_oids为真时创建带 OIDS 的外部表(Etsuro Fujita)
修复对在当前事务中插入、随后被一个现已回滚的子事务删除的行的活跃性检查(Andres Freund)
如果同一事务中稍后执行了
CREATE INDEX或CLUSTER,这可能导致问题(至少是虚假警告,最坏是无限循环)。在
PREPARE TRANSACTION期间清除pg_stat_activity.xact_start(Andres Freund)在
PREPARE之后,发起会话已不在事务中,因此不应继续显示事务开始时间。修复
REASSIGN OWNED对文本搜索对象失败的问题([Aacute]lvaro Herrera)在 postmaster 启动期间阻塞信号(Tom Lane)
这确保了 postmaster 在例如启动过程中收到 SIGINT 时能够正确清理自身。
修复处理
pg_hba.conf中指定主机名而非 IP 地址的条目时的客户端主机名查找(Tom Lane)确保反向 DNS 查找失败会被报告,而不是只是静默地不匹配这些条目。同时确保每个连接只做一次反向 DNS 查找尝试,而不是每个主机名条目一次——如果查找尝试失败,此前发生的就是后者。
保护
make check期间启动的临时 postmaster 的 Unix 域套接字(Noah Misch)正如我们此前在 CVE-2014-0067 中指出的,任何能够访问套接字文件的本地用户都可以以服务器的引导超级用户身份连接,进而以运行测试的操作系统用户身份执行任意代码。此变更通过把服务器的套接字放到
/tmp下一个临时的、模式为 0700 的子目录中来防御这一风险。但在不支持 Unix 套接字的平台(尤其是 Windows)上风险仍然存在,因为那时临时 postmaster 必须接受本地 TCP 连接。此变更的一个有用副作用是简化了覆盖
DEFAULT_PGSOCKET_DIR的构建中的make check测试。常用的非默认值(如/var/run/postgresql)往往不允许构建用户写入,此前需要一些变通办法,现在不再需要了。修复表空间创建 WAL 重放在 Windows 上无法工作的问题(MauMau)
修复 Windows 上套接字创建失败的检测(Bruce Momjian)
在 Windows 上,允许新会话从配置文件获取 PGC_BACKEND 参数(例如log_connections)的值(Amit Kapila)
此前,如果启动后在文件中更改了这类参数,更改不会生效。
在 Windows 上正确地为可执行文件路径名加引号(Nikhil Deshpande)
如果安装路径同时包含空格和
@符号,这一疏忽可能导致 initdb 和 pg_upgrade 在 Windows 上失败。修复 macOS 上 libpython 的链接(Tom Lane)
我们先前使用的方法在 Xcode 5.0 及之后版本提供的 Python 库上可能失败。
当服务器持续以快于客户端吸收速度的速率发送数据时,避免 libpq 中的缓冲区膨胀(Shin-ichi Morita、Tom Lane)
libpq 可能被迫不断增大其输入缓冲区,直到内存耗尽(这会被误导性地报告为 “lost synchronization with server”)。在正常情况下,数据持续以快于
recv()循环吸收速度的速率传输是相当牵强的,但在客户端因调度器约束被人为减速时曾观察到这种情况。确保 libpq 中的 LDAP 查找尝试按预期超时(Laurenz Albe)
修复 ecpg 在
char *数组作为返回多行的 FETCH 语句目标时的行为,以及其他一些数组处理修复(Ashutosh Bapat)修复 pg_restore 对旧式大对象注释的处理(Tom Lane)
如果归档文件由 9.0 之前版本的 pg_dump 生成且包含较多大对象注释,直接恢复到数据库通常会失败。
在
contrib/pgcrypto函数中,确保返回前清除栈变量中的敏感信息(Marko Kreen)在
contrib/uuid-ossp中,跨调用缓存 OSSP UUID 库的状态(Tom Lane)这提高了 UUID 生成的效率,并在有
/dev/urandom的平台上减少了从中抽取的熵量。把时区数据文件更新为 tzdata 版本 2014e for DST law changes in Crimea, Egypt, and Morocco。