↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

文档版本比较

POSTGRESQL · VERSION COMPARE

PostgreSQL 9.5.4 发布变化

此版本的完整功能、修复与兼容性说明,以及其他版本的关联记录。

此版本的完整变化
此版本的完整变化

包括起始版本之后至目标版本的变化。大版本号表示该分支的首个版本。

完整发布变化

9.5.4

2016-08-11

导出 JSON ↓
51项变化功能、修复、改进
1个版本按版本分组
2CVE独立漏洞编号

9.5.4stable支持截止 2021-02-11

安全变化
CVE / 问题严重程度修复版本所选版本状态
CVE-2016-5424

修复客户端程序对数据库名和角色名中特殊字符的处理

9.5.4已记录修复
CVE-2016-5423

修复嵌套 CASE-WHEN 表达式可能被错误评估的问题

9.5.4已记录修复

PostgreSQL 9.5.4

迁移与兼容性

对于运行 9.5.X 的用户,不需要转储/恢复。

不过,如果你是从 9.5.2 之前的版本升级,参见第 E.24 节。

安全修复嵌套 CASE-WHEN 表达式可能被错误评估的问题

变更

修复嵌套 CASE-WHEN 表达式可能被错误评估的问题(Heikki Linnakangas、Michael Paquier、Tom Lane)

出现在另一个 CASE 的测试值子表达式中的 CASE 表达式,可能会混淆其自身的测试值是否为空。此外,内联实现 CASE 表达式所用相等操作符的 SQL 函数时,可能向该 SQL 函数体内 CASE 表达式中调用的函数传递错误的测试值。如果测试值的数据类型不同,可能导致崩溃;而且此类情况可被滥用以泄露服务器内存的部分内容。(CVE-2016-5423)

关联记录 (4)
安全修复客户端程序对数据库名和角色名中特殊字符的处理

变更

修复客户端程序对数据库名和角色名中特殊字符的处理(Noah Misch、Nathan Bossart、Michael Paquier)

vacuumdb 及其他客户端程序中的许多地方,可能会被包含双引号或反斜杠的数据库名和角色名弄混。收紧引用规则以使其安全。同时确保当 conninfo 字符串被用作这些程序的数据库名参数时,全程都被正确地如此对待。

修复 psql 的 \connect 和 \password 命令中对成对双引号的处理,使其与文档一致。

在 psql 的 \connect 命令中引入新的 -reuse-previous 选项,以显式控制是否复用先前连接的连接参数。(若不使用该选项,则与以前一样,根据数据库名是否看起来像 conninfo 字符串来决定。)这使 pg_dumpall 脚本能够安全地处理包含特殊字符的数据库名。

pg_dumpall 现在拒绝处理包含回车或换行的数据库名和角色名,因为在 Windows 上安全地引用这些字符似乎不切实际。将来我们可能会在服务器端拒绝此类名称,但尚未采取这一步骤。

这些被视为安全修复,因为包含特殊字符的恶意构造的对象名,可能在超级用户下次执行 pg_dumpall 或其他例行维护操作时被用于以超级用户权限执行命令。(CVE-2016-5424)

关联记录 (4)
问题修复修复对嵌套组合值应用 IS NULL/IS NOT NULL 时的边界错误行为

变更

修复对嵌套组合值应用 IS NULL/IS NOT NULL 时的边界错误行为(Andrew Gierth、Tom Lane)

SQL 标准规定,对于全空值的行,IS NULL 应返回 TRUE(因此 ROW(NULL,NULL) IS NULL 得到 TRUE),但这并不意味着递归适用(因此 ROW(NULL, ROW(NULL,NULL)) IS NULL 得到 FALSE)。核心执行器对此处理正确,但某些规划器优化把该测试当作递归的(因而在两种情况下都产生 TRUE),而 contrib/postgres_fdw 可能产生类似错误行为的远程查询。

关联记录 (4)
问题修复修复递归 CTE(WITH 项)中的 INSERT ... ON CONFLICT 出现“unrecognized node type”错误的问题

变更

修复递归 CTE(WITH 项)中的 INSERT ... ON CONFLICT 出现“unrecognized node type”错误的问题(Peter Geoghegan)

问题修复修复 INSERT ... ON CONFLICT,使其能成功匹配在规划器表达式预处理阶段被简化的索引表达式或索引谓词

变更

修复 INSERT ... ON CONFLICT,使其能成功匹配在规划器表达式预处理阶段被简化的索引表达式或索引谓词(Tom Lane)

改进正确处理这样的排除约束冲突:约束作用于 INSERT ... ON CONFLICT 命令的目标表,但不是所选仲裁索引之一

变更

正确处理这样的排除约束冲突:约束作用于 INSERT ... ON CONFLICT 命令的目标表,但不是所选仲裁索引之一(Tom Lane)

这种情况本应引发普通的约束冲突错误,但实际上陷入了无限循环。

问题修复修复目标表在 OID 上有唯一索引时 INSERT ... ON CONFLICT 失败的问题

变更

修复目标表在 OID 上有唯一索引时 INSERT ... ON CONFLICT 失败的问题(Tom Lane)

改进使 inet 和 cidr 数据类型正确拒绝包含过多冒号分隔字段的 IPv6 地址

变更

使 inet 和 cidr 数据类型正确拒绝包含过多冒号分隔字段的 IPv6 地址(Tom Lane)

关联记录 (4)
问题修复防止 close_ps()(point ## lseg 操作符)在输入坐标为 NaN 时崩溃

变更

防止 close_ps()(point ## lseg 操作符)在输入坐标为 NaN 时崩溃(Tom Lane)

使其返回 NULL 而不是崩溃。

关联记录 (4)
问题修复避免向 pg_get_expr() 传入不一致的值时可能发生的崩溃

变更

避免向 pg_get_expr() 传入不一致的值时可能发生的崩溃(Michael Paquier、Thomas Munro)

关联记录 (2)
问题修复修复 to_number() 中几处一字节缓冲区过读

变更

修复 to_number() 中几处一字节缓冲区过读(Peter Eisentraut)

在几种情况下,to_number() 函数会从输入字符串中多读取一个字符。如果输入恰好位于内存末尾附近,则有很小的崩溃可能。

关联记录 (4)
改进当指定了 WITH NO DATA 时,不对 CREATE MATERIALIZED VIEW 或 CREATE TABLE AS 中包含的查询运行规划器

变更

当指定了 WITH NO DATA 时,不对 CREATE MATERIALIZED VIEW 或 CREATE TABLE AS 中包含的查询运行规划器(Michael Paquier、Tom Lane)

这避免了一些不必要的失败条件,例如物化视图调用的稳定函数依赖某个尚不存在的表时。

关联记录 (2)
改进避免在经过 heap_update() 的高开销路径中出现不安全的中间状态

变更

避免在经过 heap_update() 的高开销路径中出现不安全的中间状态(Masahiko Sawada、Andres Freund)

以前,这些情况会锁定目标元组(通过设置其 XMAX),但不为该动作记录 WAL,因此如果页面被刷出到磁盘,随后在元组更新完成之前发生数据库崩溃,就有数据完整性问题的风险。

关联记录 (4)
问题修复修复行锁定操作 WAL 重放期间的提示位更新

变更

修复行锁定操作 WAL 重放期间的提示位更新(Andres Freund)

此问题唯一已知的后果是,已预备但未提交的事务所持有的行锁,在崩溃并重启之后可能无法被执行。

关联记录 (2)
改进避免在可串行化模式下获取 FOR KEY SHARE 行锁时出现不必要的“could not serialize access”错误

变更

避免在可串行化模式下获取 FOR KEY SHARE 行锁时出现不必要的“could not serialize access”错误(Álvaro Herrera)

关联记录 (2)
改进确保计划节点返回的“展开”数据是只读的

变更

确保计划节点返回的“展开”数据是只读的(Tom Lane)

这避免了在某些情况下,下层计划节点的结果被上层节点多处引用时的失败。就核心 PostgreSQL 而言,只有 PL/pgSQL 函数返回的数组值有风险;但扩展可能将展开数据用于其他用途。

问题修复避免当指定变量的字符串值为空时 postgres -C 崩溃

变更

避免当指定变量的字符串值为空时 postgres -C 崩溃(Michael Paquier)

关联记录 (3)
改进防止 WAL 发送器进程意外等待接收器

变更

防止 WAL 发送器进程意外等待接收器(Kyotaro Horiguchi)

问题修复修复逻辑解码中可能丢失大型子事务的问题

变更

修复逻辑解码中可能丢失大型子事务的问题(Petru-Florin Mihancea)

关联记录 (1)
问题修复修复子事务不包含实际更改时逻辑解码失败的问题

变更

修复子事务不包含实际更改时逻辑解码失败的问题(Marko Tiikkaja、Andrew Gierth)

关联记录 (1)
改进确保后端能看到共享目录的最新统计信息

变更

确保后端能看到共享目录的最新统计信息(Tom Lane)

统计收集器在普通后端发出请求后,未能更新共享目录的统计文件。这个问题被部分掩盖了,因为自动清理启动器会定期发出确实触发此类更新的请求;但在禁用自动清理时就变得明显了。

关联记录 (2)
改进当多个后端相继请求更新时,避免统计文件的冗余写入

变更

当多个后端相继请求更新时,避免统计文件的冗余写入(Tom Lane、Tomas Vondra)

关联记录 (2)
改进避免在 VACUUM 期间消耗事务 ID

变更

避免在 VACUUM 期间消耗事务 ID(Alexander Korotkov)

VACUUM 中的某些情况会不必要地导致向当前事务分配 XID。通常这可以忽略不计,但如果已接近 XID 回卷限制,在防回卷清理期间消耗更多 XID 就非常糟糕了。

关联记录 (4)
改进防止在从 9.3 之前版本 pg_upgrade 而来的安装中清理多事务 ID 时可能出现的失败

变更

防止在从 9.3 之前版本 pg_upgrade 而来的安装中清理多事务 ID 时可能出现的失败(Andrew Gierth、Álvaro Herrera)

此 bug 的常见症状是类似“MultiXactId NNN has not been created yet -- apparent wraparound”的错误。

关联记录 (2)
改进当手动 ANALYZE 指定列列表时,不要重置表的 changes_since_analyze 计数器

变更

当手动 ANALYZE 指定列列表时,不要重置表的 changes_since_analyze 计数器(Tom Lane)

如果只分析部分列,就不应阻止其他列的例行自动分析。

关联记录 (4)
问题修复修复 ANALYZE 对包含大量空值的唯一或近似唯一列的 n_distinct 高估

变更

修复 ANALYZE 对包含大量空值的唯一或近似唯一列的 n_distinct 高估(Tom Lane)

空值可能被当作它们本身就是不同的值来计数,导致某些类型查询中规划器的严重误估。

关联记录 (4)
改进防止自动清理为同一共享目录启动多个工作进程

变更

防止自动清理为同一共享目录启动多个工作进程(Álvaro Herrera)

通常这不是什么大问题,因为清理本来就不会花很长时间;但在目录严重膨胀的情况下,这可能导致除一个工作进程外的所有工作进程都在无用地等待,而不是对其他表做有用的工作。

关联记录 (4)
问题修复修复 b-tree 标记/恢复处理中的 bug

变更

修复 b-tree 标记/恢复处理中的 bug(Kevin Grittner)

此错误可能导致内部源节点为 b-tree 索引扫描的合并连接中出现错误的连接结果或断言失败。

改进避免在放弃 b-tree 索引页删除尝试时重复释放缓冲区锁

变更

避免在放弃 b-tree 索引页删除尝试时重复释放缓冲区锁(Tom Lane)

在涉及损坏的 b-tree 索引的某些情况下,这一错误导致 VACUUM 无法完成。

关联记录 (1)
问题修复修复大型(大于 shared_buffers)哈希索引的构建

变更

修复大型(大于 shared_buffers)哈希索引的构建(Tom Lane)

用于大型索引的代码路径包含一个 bug,导致错误的哈希值被插入索引,因此后续的索引搜索总是失败——初始构建之后插入索引的元组除外。

改进防止对包含 NaN 分量值的几何列构建 GiST 索引时出现无限循环

变更

防止对包含 NaN 分量值的几何列构建 GiST 索引时出现无限循环(Tom Lane)

关联记录 (3)
问题修复修复对 interval 列上的 contrib/btree_gist 索引执行最近邻(按距离 ORDER BY)索引扫描时可能的崩溃

变更

修复对 interval 列上的 contrib/btree_gist 索引执行最近邻(按距离 ORDER BY)索引扫描时可能的崩溃(Peter Geoghegan)

问题修复修复尝试更新 BRIN 索引条目时出现“PANIC: failed to add BRIN tuple”错误的问题

变更

修复尝试更新 BRIN 索引条目时出现“PANIC: failed to add BRIN tuple”错误的问题(Álvaro Herrera)

问题修复修复后台工作进程关闭期间可能的崩溃

变更

修复后台工作进程关闭期间可能的崩溃(Dmitry Ivanov)

问题修复修复 PL/pgSQL 对 IMPORT FOREIGN SCHEMA 命令中 INTO 子句的处理

变更

修复 PL/pgSQL 对 IMPORT FOREIGN SCHEMA 命令中 INTO 子句的处理(Tom Lane)

问题修复修复 contrib/btree_gin,使其正确处理 bigint 的最小可能值

变更

修复 contrib/btree_gin,使其正确处理 bigint 的最小可能值(Peter Eisentraut)

关联记录 (4)
改进让 libpq 能正确解码来自未来版本服务器的服务器版本号

变更

让 libpq 能正确解码来自未来版本服务器的服务器版本号(Peter Eisentraut)

计划在 9.6 之后的版本中把服务器版本号从三段式改为两段式。确保 PQserverVersion() 在此类情况下返回正确的值。

关联记录 (4)
问题修复修复 ecpg 中 unsigned long long 数组元素的代码

变更

修复 ecpg 中 unsigned long long 数组元素的代码(Michael Meskes)

关联记录 (4)
改进在同时使用 -c 和 -C 选项的 pg_dump 中,避免发出多余的 CREATE SCHEMA public 命令

变更

在同时使用 -c 和 -C 选项的 pg_dump 中,避免发出多余的 CREATE SCHEMA public 命令(David Johnston、Tom Lane)

关联记录 (3)
改进改进并行 pg_dump 和 pg_restore 对 SIGTERM/Ctrl-C 的处理

变更

改进并行 pg_dump 和 pg_restore 对 SIGTERM/Ctrl-C 的处理(Tom Lane)

确保工作进程迅速退出,并设法向所连接的后端发送查询取消请求,以防它们正在执行诸如 CREATE INDEX 之类的长时间运行操作。

关联记录 (2)
问题修复修复并行 pg_dump 和 pg_restore 中的错误报告

变更

修复并行 pg_dump 和 pg_restore 中的错误报告(Tom Lane)

以前,pg_dump 或 pg_restore 工作进程报告的错误可能永远无法到达用户的控制台,因为消息要经过主进程传递,而存在多种会阻止主进程转发消息的死锁场景。现在改为把所有内容直接打印到 stderr。在某些情况下这会导致重复消息(例如所有工作进程都报告服务器关闭),但这似乎比没有消息要好。

关联记录 (2)
改进确保 Windows 上的并行 pg_dump 或 pg_restore 在出错后正确关闭

变更

确保 Windows 上的并行 pg_dump 或 pg_restore 在出错后正确关闭(Kyotaro Horiguchi)

以前,它会报告错误,然后就一直停在那里,直到用户手动停止。

关联记录 (2)
改进使并行 pg_dump 在对备库服务器运行时干净地失败

变更

使并行 pg_dump 在对备库服务器运行时干净地失败(Magnus Hagander)

除非指定 --no-synchronized-snapshots,否则不支持这种用法,但此前的错误处理并不好。

改进使 pg_dump 在构建时未包含 zlib 支持时表现更好

变更

使 pg_dump 在构建时未包含 zlib 支持时表现更好(Kyotaro Horiguchi)

它在并行转储时不能正确工作,在其他情况下还会发出一些相当无意义的警告。

关联记录 (2)
改进使 pg_basebackup 接受 -Z 0 表示不压缩

变更

使 pg_basebackup 接受 -Z 0 表示不压缩(Fujii Masao)

关联记录 (4)
问题修复修复构建 AIX 共享库的 makefile 规则,使其在并行 make 下安全

变更

修复构建 AIX 共享库的 makefile 规则,使其在并行 make 下安全(Noah Misch)

关联记录 (4)
问题修复修复 TAP 测试和 MSVC 脚本,使其在构建目录路径名包含空格时也能工作

变更

修复 TAP 测试和 MSVC 脚本,使其在构建目录路径名包含空格时也能工作(Michael Paquier、Kyotaro Horiguchi)

关联记录 (4)
改进使“statement timeout”与“lock timeout”的报告更具可预测性

变更

使“statement timeout”与“lock timeout”的报告更具可预测性(Tom Lane)

在高负载机器上,回归测试有时会因报告“lock timeout”而失败,尽管语句超时本应先发生。

关联记录 (2)
改进使回归测试在丹麦语和威尔士语区域设置下安全

变更

使回归测试在丹麦语和威尔士语区域设置下安全(Jeff Janes、Tom Lane)

修改了一些会触发这些区域设置特殊排序规则的测试数据。

关联记录 (4)
改进更新我们的时区代码副本,以匹配 IANA 的 tzcode 2016c 版

变更

更新我们的时区代码副本,以匹配 IANA 的 tzcode 2016c 版(Tom Lane)

这是为了应对时区数据文件未来预期的变更。它还修复了处理特殊时区方面的一些边界 bug。

关联记录 (4)
改进把时区数据文件更新到 tzdata 2016f 版,涉及克麦罗沃和新西伯利亚的夏令时法规变更,以及阿塞拜疆、白俄罗斯和摩洛哥的历史数据修正。

变更

把时区数据文件更新到 tzdata 2016f 版,涉及克麦罗沃和新西伯利亚的夏令时法规变更,以及阿塞拜疆、白俄罗斯和摩洛哥的历史数据修正。

关联记录 (4)
如何生成比较结果?

比较依据起始版本之后至目标版本的 PostgreSQL 发布说明。经核实的回补重复项会谨慎合并,保留每条原始说明;相关提交可能涉及独立变化,仍作为不同记录保留。

发布快照: 2026-09-26 · 安全快照: 2026-09-26

内容来自 PostgreSQL 发布说明。交互方式参考 pgversions.com 与 pgversionreport.