pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
发布日期:. 2016-03-31
此版本包含自 9.5.1 以来的多种修复。 有关 9.5 大版本中新特性的信息,参见 第 E.26 节。
对于运行 9.5.X 的用户,不需要转储/恢复。
不过,按照下面第一条变更日志条目的说明,应用此更新后你可能需要对某些索引执行 REINDEX。
在非 C 区域设置中禁用字符串排序的缩写键(Robert Haas)
PostgreSQL 9.5 引入了用标准 C 库函数 strxfrm() 替代 strcoll() 来加速字符串数据类型比较的逻辑。现在发现,大多数版本的 glibc(Linux 的 C 库实现)所实现的 strxfrm() 都有缺陷,在某些区域设置下会产生与 strcoll() 不一致的字符串比较结果。在更好地刻画此问题之前,在所有非 C 区域设置中禁用该优化。(C 区域设置是安全的,因为它既不使用 strcoll() 也不使用 strxfrm()。)
遗憾的是,此问题不仅影响排序,还影响 B-tree 索引中的条目排序,这意味着如果 text、varchar 或 char 列上的 B-tree 索引按受影响的区域设置排序,并且在 PostgreSQL 9.5.0 或 9.5.1 下构建或修改过,它们现在可能已经损坏。用户应对可能受影响的索引执行 REINDEX。
目前无法给出已知受影响区域设置的完整清单。C 区域设置已知安全,没有证据表明 en_US 等基于英语的区域设置有问题,但 de_DE 等其他一些常用区域设置在大多数 glibc 版本中受影响。
在缓存计划中正确维护行安全性状态(Stephen Frost)
在以多个角色执行查询的会话中,计划缓存可能错误地复用为另一个角色 ID 生成的计划,从而在使用行级安全性(RLS)时可能应用错误的策略集。(CVE-2016-2193)
为 contrib/pageinspect 的一些新函数添加必须是超级用户的检查(Andreas Seltenreich)
pageinspect 扩展中大多数检查 bytea 值的函数都禁止非超级用户调用,但 brin_page_type() 和 brin_metapage_info() 没有这样做。向它们传递精心构造的 bytea 值可能导致服务器崩溃或泄露服务器内存中的几个字节。添加缺失的权限检查以防止滥用。(CVE-2016-3065)
修复索引化 ROW() 比较处理不正确的问题(Simon Riggs)
9.5 引入的一个小优化中的缺陷会导致错误结果:当 ROW() 比较与索引排序部分匹配但并不完全匹配时(例如列顺序不同,或索引同时包含 ASC 和 DESC 列)。在找到更好的解决方案之前,该优化已被移除。
修复索引化 ROW() 比较中对 NULL 索引条目处理不正确的问题(Tom Lane)
使用诸如 ROW(a, b) > ROW('x', 'y') 的行比较进行索引搜索时,会在到达 b 列的 NULL 条目时停止,忽略了 b 列可能有与更靠后的 a 值关联的非 NULL 值这一事实。
避免因重命名文件前后未充分调用 fsync() 而导致的不太可能的数据丢失场景(Michael Paquier、Tomas Vondra、Andres Freund)
修复在执行 SELECT FOR UPDATE/SHARE 且包含一些无需锁定的关系的查询中重新检查刚修改的行时行为不正确的问题(Tom Lane)
在重新检查期间,来自未锁定关系的行被错误地当作全 NULL 处理,这可能导致错误地判定更新后的行不再满足 WHERE 条件,或错误地输出 NULL。
修复 json_to_record() 在其输入对象的某个字段包含与所请求输出列名同名的子对象字段时的 bug(Tom Lane)
修复以空数组调用双参数形式的 jsonb_object() 时结果无意义的问题(Michael Paquier、Andrew Dunstan)
修复 jsonb_set() 在把路径数组元素转换为整数用作数组下标时的错误行为(Michael Paquier)
修复 to_char() 的 OF 格式代码对负时区偏移的格式化错误(Thomas Munro、Tom Lane)
修复 INSERT ... ON CONFLICT 的等待可能被错误记录的问题(Peter Geoghegan)
日志消息有时会声称等待是由排除约束引起的,尽管实际上并非如此。
在恢复达到一致状态之前忽略 recovery_min_apply_delay 参数(Michael Paquier)
以前,备库在重放使其数据库状态有效所需的初始 WAL 部分时,也会响应 recovery_min_apply_delay 而延迟应用 WAL 记录。由于备库在达到一致数据库状态之前毫无用处,这被认为没有帮助。
正确处理服务器启动期间 pg_subtrans 接近 XID 回卷的情况(Jeff Janes)
修复逻辑解码中的若干 bug(Andres Freund)
问题情形包括:副本标识为 FULL 时超过一页的元组、在大到需要假脱机到磁盘的事务中更改主键的 UPDATE、错误地报告“subxact logged without previous toplevel record”,以及事务提交时间的错误报告。
修复外层视图的 WHERE 子句包含相关子查询时嵌套安全屏障视图的规划器错误(Dean Rasheed)
修复 GIN 索引搜索中的内存泄漏(Tom Lane)
修复因多次尝试释放 localeconv() 输出字符串而导致的边界崩溃(Tom Lane)
修复 ispell 词典词缀文件的解析(Tom Lane)
如果词缀文件包含任何在大小写转换期间字节长度会变化的字符(例如土耳其语 UTF8 区域设置中的 I),代码就可能出错。
避免使用 sscanf() 解析 ispell 词典文件(Artur Zakirov)
这规避了 FreeBSD 衍生平台(包括 macOS)上的一个可移植性问题。
修复 PPC 上配合 IBM xlc 编译器使用的原子操作代码(Noah Misch)
此错误导致该平台上并发操作偶尔失败。
避免在旧版 Windows(7SP1/2008R2SP1 之前)上配合支持 AVX2 的 CPU 和使用 Visual Studio 2013 构建的 Postgres 时崩溃(Christian Ullrich)
这是对 Visual Studio 2013 运行时库中一个 bug 的变通方案,微软已表示不会在该版本中修复它。
修复 psql 的 Tab 补全逻辑,使其正确处理多字节字符(Kyotaro Horiguchi、Robert Haas)
修复 psql 对 SECURITY LABEL 的 Tab 补全(Tom Lane)
在 SECURITY LABEL 之后按 TAB 可能导致崩溃或提供不合适的关键字。
使 pg_ctl 在命令行未指定时接受来自 PGCTLTIMEOUT 环境变量的等待超时(Noah Misch)
这方便了较慢的 buildfarm 成员的测试,允许它们全局指定比正常更长的 postmaster 启动和关闭超时。
修复 pg_ctl 中对 Windows 服务状态的不正确测试(Manuel Mathar)
上一轮小版本发布试图修复 pg_ctl,使其正确判断是否把日志消息发送到 Windows 事件日志,但把测试条件弄反了。
修复 pgbench 对 -C 与 -M prepared 选项组合的处理(Tom Lane)
在 pg_upgrade 中,当新数据目录位于旧数据目录之内时跳过创建删除脚本(Bruce Momjian)
在这种情况下盲目执行该脚本会导致新数据目录丢失。
在 PL/Perl 中,把空的 Postgres 数组正确转换为空的 Perl 数组(Alex Hunsaker)
使 PL/Python 能处理不是有效 Python 标识符的函数名(Jim Nasby)
修复 contrib/pgstattuple 的 pgstatindex() 函数返回统计信息中的多处错误(Tom Lane)
在 MSVC 构建中移除对 psed 的依赖,因为核心 Perl 已不再提供它(Michael Paquier、Andrew Dunstan)
把时区数据文件更新到 tzdata 2016c 版,涉及阿塞拜疆、智利、海地、巴勒斯坦和俄罗斯(阿尔泰、阿斯特拉罕、基洛夫、萨哈林、乌里扬诺夫斯克地区)的夏令时法规变更,以及立陶宛、摩尔多瓦和俄罗斯(加里宁格勒、萨马拉、伏尔加格勒)的历史数据修正。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。