文档版本比较
POSTGRESQL · VERSION COMPARE
PostgreSQL 9.4.9 发布变化
此版本的完整功能、修复与兼容性说明,以及其他版本的关联记录。
包括起始版本之后至目标版本的变化。大版本号表示该分支的首个版本。
从数据库输出识别起始版本
完整发布变化
9.4.9
2016-08-11
9.4.9stable支持截止 2020-02-13
安全变化
| CVE / 问题 | 严重程度 | 修复版本 | 所选版本状态 |
|---|---|---|---|
| CVE-2016-5424 修复客户端程序对数据库名和角色名中特殊字符的处理 | 9.4.9 | 已记录修复 | |
| CVE-2016-5423 修复嵌套 CASE-WHEN 表达式可能被错误评估的问题 | 9.4.9 | 已记录修复 |
PostgreSQL 9.4.9
迁移与兼容性
对于运行 9.4.X 的用户,不需要转储/恢复。
但是,如果你是从早于 9.4.6 的版本升级,请参见第 E.21 节。
安全修复嵌套 CASE-WHEN 表达式可能被错误评估的问题
变更
修复嵌套 CASE-WHEN 表达式可能被错误评估的问题(Heikki Linnakangas、Michael Paquier、Tom Lane)
出现在另一个 CASE 的测试值子表达式中的 CASE 表达式,可能会混淆其自身的测试值是否为空。此外,内联实现 CASE 表达式所用相等操作符的 SQL 函数时,可能向该 SQL 函数体内 CASE 表达式中调用的函数传递错误的测试值。如果测试值的数据类型不同,可能导致崩溃;而且此类情况可被滥用以泄露服务器内存的部分内容。(CVE-2016-5423)
安全修复客户端程序对数据库名和角色名中特殊字符的处理
变更
修复客户端程序对数据库名和角色名中特殊字符的处理(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)
问题修复修复对嵌套组合值应用 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 可能产生类似错误行为的远程查询。
改进使 inet 和 cidr 数据类型正确拒绝包含过多冒号分隔字段的 IPv6 地址
变更
使 inet 和 cidr 数据类型正确拒绝包含过多冒号分隔字段的 IPv6 地址(Tom Lane)
问题修复防止 close_ps()(point ## lseg 操作符)在输入坐标为 NaN 时崩溃
变更
防止 close_ps()(point ## lseg 操作符)在输入坐标为 NaN 时崩溃(Tom Lane)
使其返回 NULL 而不是崩溃。
问题修复避免向 pg_get_expr() 传入不一致的值时可能发生的崩溃
变更
避免向 pg_get_expr() 传入不一致的值时可能发生的崩溃(Michael Paquier、Thomas Munro)
问题修复修复 to_number() 中几处一字节缓冲区过读
变更
修复 to_number() 中几处一字节缓冲区过读(Peter Eisentraut)
在几种情况下,to_number() 函数会从输入字符串中多读取一个字符。如果输入恰好位于内存末尾附近,则有很小的崩溃可能。
改进当指定了 WITH NO DATA 时,不对 CREATE MATERIALIZED VIEW 或 CREATE TABLE AS 中包含的查询运行规划器
变更
当指定了 WITH NO DATA 时,不对 CREATE MATERIALIZED VIEW 或 CREATE TABLE AS 中包含的查询运行规划器(Michael Paquier、Tom Lane)
这避免了一些不必要的失败条件,例如物化视图调用的稳定函数依赖某个尚不存在的表时。
改进避免在经过 heap_update() 的高开销路径中出现不安全的中间状态
变更
避免在经过 heap_update() 的高开销路径中出现不安全的中间状态(Masahiko Sawada、Andres Freund)
以前,这些情况会锁定目标元组(通过设置其 XMAX),但不为该动作记录 WAL,因此如果页面被刷出到磁盘,随后在元组更新完成之前发生数据库崩溃,就有数据完整性问题的风险。
问题修复修复行锁定操作 WAL 重放期间的提示位更新
变更
修复行锁定操作 WAL 重放期间的提示位更新(Andres Freund)
此问题唯一已知的后果是,已预备但未提交的事务所持有的行锁,在崩溃并重启之后可能无法被执行。
改进避免在可串行化模式下获取 FOR KEY SHARE 行锁时出现不必要的“could not serialize access”错误
变更
避免在可串行化模式下获取 FOR KEY SHARE 行锁时出现不必要的“could not serialize access”错误(Álvaro Herrera)
问题修复避免当指定变量的字符串值为空时 postgres -C 崩溃
变更
避免当指定变量的字符串值为空时 postgres -C 崩溃(Michael Paquier)
问题修复修复逻辑解码中可能丢失大型子事务的问题
问题修复修复子事务不包含实际更改时逻辑解码失败的问题
变更
修复子事务不包含实际更改时逻辑解码失败的问题(Marko Tiikkaja、Andrew Gierth)
关联记录 (1)
改进确保后端能看到共享目录的最新统计信息
变更
确保后端能看到共享目录的最新统计信息(Tom Lane)
统计收集器在普通后端发出请求后,未能更新共享目录的统计文件。这个问题被部分掩盖了,因为自动清理启动器会定期发出确实触发此类更新的请求;但在禁用自动清理时就变得明显了。
改进避免多个后端进程密集请求更新时统计信息文件的冗余写入
变更
避免多个后端进程密集请求更新时统计信息文件的冗余写入(Tom Lane、Tomas Vondra)
改进避免在 VACUUM 期间消耗事务 ID
变更
避免在 VACUUM 期间消耗事务 ID(Alexander Korotkov)
VACUUM 中的某些情况会不必要地导致向当前事务分配 XID。通常这可以忽略不计,但如果已接近 XID 回卷限制,在防回卷清理期间消耗更多 XID 就非常糟糕了。
改进避免在VACUUM FREEZE期间取消热备查询
变更
避免在VACUUM FREEZE期间取消热备查询(Simon Riggs, Álvaro Herrera)
在原本空闲的主库服务器上执行VACUUM FREEZE可能导致其备库服务器上的查询被不必要地取消。
改进防止在从 9.3 之前版本 pg_upgrade 而来的安装中清理多事务 ID 时可能出现的失败
变更
防止在从 9.3 之前版本 pg_upgrade 而来的安装中清理多事务 ID 时可能出现的失败(Andrew Gierth、Álvaro Herrera)
此 bug 的常见症状是类似“MultiXactId NNN has not been created yet -- apparent wraparound”的错误。
改进当手动 ANALYZE 指定列列表时,不要重置表的 changes_since_analyze 计数器
变更
当手动 ANALYZE 指定列列表时,不要重置表的 changes_since_analyze 计数器(Tom Lane)
如果只分析部分列,就不应阻止其他列的例行自动分析。
关联记录 (4)
问题修复修复 ANALYZE 对包含大量空值的唯一或近似唯一列的 n_distinct 高估
变更
修复 ANALYZE 对包含大量空值的唯一或近似唯一列的 n_distinct 高估(Tom Lane)
空值可能被当作它们本身就是不同的值来计数,导致某些类型查询中规划器的严重误估。
改进防止自动清理为同一共享目录启动多个工作进程
变更
防止自动清理为同一共享目录启动多个工作进程(Álvaro Herrera)
通常这不是什么大问题,因为清理本来就不会花很长时间;但在目录严重膨胀的情况下,这可能导致除一个工作进程外的所有工作进程都在无用地等待,而不是对其他表做有用的工作。
改进避免在放弃 b-tree 索引页删除尝试时重复释放缓冲区锁
变更
避免在放弃 b-tree 索引页删除尝试时重复释放缓冲区锁(Tom Lane)
在涉及损坏的 b-tree 索引的某些情况下,这一错误导致 VACUUM 无法完成。
关联记录 (1)
改进防止为包含 NaN 分量值的几何列构建 GiST 索引时出现无限循环
变更
防止为包含 NaN 分量值的几何列构建 GiST 索引时出现无限循环(Tom Lane)
问题修复修复contrib/btree_gin以正确处理最小的bigint值
变更
修复contrib/btree_gin以正确处理最小的bigint值(Peter Eisentraut)
改进让 libpq 能正确解码来自未来版本服务器的服务器版本号
变更
让 libpq 能正确解码来自未来版本服务器的服务器版本号(Peter Eisentraut)
计划在 9.6 之后的版本中把服务器版本号从三段式改为两段式。确保 PQserverVersion() 在此类情况下返回正确的值。
问题修复修复ecpg对unsigned long long数组元素的代码
变更
修复ecpg对unsigned long long数组元素的代码(Michael Meskes)
改进修复pg_dump同时使用-c和-C选项时避免输出多余的CREATE SCHEMA public命令
变更
修复pg_dump同时使用-c和-C选项时避免输出多余的CREATE SCHEMA public命令(David Johnston、Tom Lane)
改进改进并行 pg_dump 和 pg_restore 对 SIGTERM/Ctrl-C 的处理
变更
改进并行 pg_dump 和 pg_restore 对 SIGTERM/Ctrl-C 的处理(Tom Lane)
确保工作进程迅速退出,并设法向所连接的后端发送查询取消请求,以防它们正在执行诸如 CREATE INDEX 之类的长时间运行操作。
问题修复修复并行 pg_dump 和 pg_restore 中的错误报告
变更
修复并行 pg_dump 和 pg_restore 中的错误报告(Tom Lane)
以前,pg_dump 或 pg_restore 工作进程报告的错误可能永远无法到达用户的控制台,因为消息要经过主进程传递,而存在多种会阻止主进程转发消息的死锁场景。现在改为把所有内容直接打印到 stderr。在某些情况下这会导致重复消息(例如所有工作进程都报告服务器关闭),但这似乎比没有消息要好。
改进确保 Windows 上的并行 pg_dump 或 pg_restore 在出错后正确关闭
变更
确保 Windows 上的并行 pg_dump 或 pg_restore 在出错后正确关闭(Kyotaro Horiguchi)
以前,它会报告错误,然后就一直停在那里,直到用户手动停止。
改进使 pg_dump 在构建时未包含 zlib 支持时表现更好
变更
使 pg_dump 在构建时未包含 zlib 支持时表现更好(Kyotaro Horiguchi)
它在并行转储时不能正确工作,在其他情况下还会发出一些相当无意义的警告。
改进使pg_basebackup接受-Z 0表示不压缩
变更
使pg_basebackup接受-Z 0表示不压缩(Fujii Masao)
问题修复修复构建 AIX 共享库的 makefile 规则,使其在并行 make 下安全
变更
修复构建 AIX 共享库的 makefile 规则,使其在并行 make 下安全(Noah Misch)
问题修复修复构建目录路径名包含空格时 TAP 测试和 MSVC 脚本的工作
变更
修复构建目录路径名包含空格时 TAP 测试和 MSVC 脚本的工作(Michael Paquier、Kyotaro Horiguchi)
改进使“statement timeout”与“lock timeout”的报告更具可预测性
变更
使“statement timeout”与“lock timeout”的报告更具可预测性(Tom Lane)
在高负载机器上,回归测试有时会因报告“lock timeout”而失败,尽管语句超时本应先发生。
改进使回归测试在丹麦语和威尔士语区域设置下安全
变更
使回归测试在丹麦语和威尔士语区域设置下安全(Jeff Janes、Tom Lane)
修改了一些会触发这些区域设置特殊排序规则的测试数据。
改进更新我们的时区代码副本,以匹配 IANA 的 tzcode 2016c 版
变更
更新我们的时区代码副本,以匹配 IANA 的 tzcode 2016c 版(Tom Lane)
这是为了应对时区数据文件未来预期的变更。它还修复了处理特殊时区方面的一些边界 bug。
改进将时区数据文件更新到tzdata发行版 2016f,以反映克麦罗沃和新西伯利亚的夏令时法规变更,以及阿塞拜疆、白俄罗斯和摩洛哥的历史修正。
变更
将时区数据文件更新到tzdata发行版 2016f,以反映克麦罗沃和新西伯利亚的夏令时法规变更,以及阿塞拜疆、白俄罗斯和摩洛哥的历史修正。
关联记录 (4)
- 相同变化PostgreSQL 9.5.4 · 把时区数据文件更新到 tzdata 2016f 版,涉及克麦罗沃和新西伯利亚的夏令时法规变更,以及阿塞拜疆、白俄罗斯和摩洛哥的历史数据修正。
- 相同变化PostgreSQL 9.3.14 · 把时区数据文件更新到 tzdata 2016f 版,涉及克麦罗沃和新西伯利亚的夏令时法规变更,以及阿塞拜疆、白俄罗斯和摩洛哥的历史数据修正。
- 相同变化PostgreSQL 9.2.18 · 把时区数据文件更新到 tzdata 2016f 版,涉及克麦罗沃和新西伯利亚的夏令时法规变更,以及阿塞拜疆、白俄罗斯和摩洛哥的历史数据修正。
- 相同变化PostgreSQL 9.1.23 · 把时区数据文件更新到 tzdata 2016f 版,涉及克麦罗沃和新西伯利亚的夏令时法规变更,以及阿塞拜疆、白俄罗斯和摩洛哥的历史数据修正。
没有匹配的变化
尝试其他关键词,或 .
如何生成比较结果?
比较依据起始版本之后至目标版本的 PostgreSQL 发布说明。经核实的回补重复项会谨慎合并,保留每条原始说明;相关提交可能涉及独立变化,仍作为不同记录保留。
发布快照: 2026-09-26 · 安全快照: 2026-09-26
内容来自 PostgreSQL 发布说明。交互方式参考 pgversions.com 与 pgversionreport.