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