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

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

文档版本比较

POSTGRESQL · VERSION COMPARE

PostgreSQL 9.4.1 发布变化

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

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

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

完整发布变化

9.4.1

2015-02-05

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

9.4.1stable支持截止 2020-02-13

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

修复出错后前端/后端协议可能失去同步的问题

9.4.1已记录修复
CVE-2014-0067

锁定 Windows 上回归测试的临时安装

9.4.1已记录修复
CVE-2015-0243

修复contrib/pgcrypto中的缓冲区越界

9.4.1已记录修复
CVE-2015-0242

修复替换实现的*printf()函数中的缓冲区越界

9.4.1已记录修复
CVE-2015-0241

修复to_char()中的缓冲区越界

9.4.1已记录修复
CVE-2014-8161

修复通过约束违反错误消息的信息泄露

9.4.1已记录修复

PostgreSQL 9.4.1

迁移与兼容性

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

但是,如果你是 Windows 用户且使用“Norwegian (Bokmål)”区域,升级后需要手工将PostgreSQL系统目录中存储的任何“Norwegian (Bokmål)_Norway”或“norwegian-bokmal”区域名替换为纯 ASCII 别名“Norwegian_Norway”。详情参见http://wiki.postgresql.org/wiki/Changes_To_Norwegian_Locale

安全修复to_char()中的缓冲区越界

变更

修复to_char()中的缓冲区越界(Bruce Momjian)

当to_char()处理要求数字位数很多的数字格式模板时,PostgreSQL会读取越过缓冲区末尾。当处理恶意构造的时间戳格式模板时,PostgreSQL会写入越过缓冲区末尾。两种情况都可能导致服务器崩溃。我们尚未排除导致权限提升攻击的可能性,尽管这种攻击似乎不太可能。(CVE-2015-0241)

关联记录 (4)
安全修复替换实现的*printf()函数中的缓冲区越界

变更

修复替换实现的*printf()函数中的缓冲区越界(Tom Lane)

PostgreSQL包含printf及相关函数的替换实现。当代码格式化浮点数(转换说明符e、E、f、F、g或G)且请求的精度超过约 500 时,会发生栈缓冲区越界。这会导致服务器崩溃,我们尚未排除导致权限提升攻击的可能性。数据库用户可以通过to_char()SQL 函数触发这种缓冲区越界。虽然这是唯一受影响的核心PostgreSQL功能,但使用 printf 族函数的扩展模块也可能存在风险。

此问题主要影响 Windows 上的PostgreSQL。PostgreSQL在系统实现足够完善时会使用系统实现,而其他现代平台上正是如此。(CVE-2015-0242)

关联记录 (4)
安全修复contrib/pgcrypto中的缓冲区越界

变更

修复contrib/pgcrypto中的缓冲区越界(Marko Tiikkaja、Noah Misch)

pgcrypto模块中内存大小跟踪的错误导致了栈缓冲区越界和对未初始化内存内容的不当依赖。缓冲区越界情况可能导致服务器崩溃,我们尚未排除导致权限提升攻击的可能性。(CVE-2015-0243)

关联记录 (4)
安全修复出错后前端/后端协议可能失去同步的问题

变更

修复出错后前端/后端协议可能失去同步的问题(Heikki Linnakangas)

如果服务器在从客户端读取协议消息中途发生任何错误,它可能失去同步,错误地把消息数据的一部分解释为新的协议消息。能够在命令参数中提交恶意构造二进制数据的攻击者可能借此注入自己的 SQL 命令。语句超时和查询取消是触发此场景最可能的错误来源。尤其容易受影响的是既使用超时又将任意用户构造数据作为二进制查询参数提交的应用程序。禁用语句超时会降低但不能消除被利用的风险。感谢 Emil Lenngren 报告此问题。(CVE-2015-0244)

关联记录 (4)
安全修复通过约束违反错误消息的信息泄露

变更

修复通过约束违反错误消息的信息泄露(Stephen Frost)

某些服务器错误消息会显示违反约束(如唯一约束)的列的值。如果用户对该表的所有列没有SELECT权限,这可能意味着暴露用户不应看到的值。我们调整了代码,使值仅在来自 SQL 命令本身或用户可以查询到时才显示。(CVE-2014-8161)

关联记录 (4)
安全锁定 Windows 上回归测试的临时安装

变更

锁定 Windows 上回归测试的临时安装(Noah Misch)

使用 SSPI 认证,只允许启动测试套件的操作系统用户连接。这在 Windows 上关闭了此前已在其他平台上关闭的同一漏洞,即其他用户可能连接到测试 postmaster。(CVE-2014-0067)

关联记录 (4)
改进处理名为“Norwegian (Bokmål)”的 Windows 区域

变更

处理名为“Norwegian (Bokmål)”的 Windows 区域(Heikki Linnakangas)

非 ASCII 区域名是有问题的,因为不清楚应该用什么编码表示它们。将这个麻烦的区域名映射为纯 ASCII 别名“Norwegian_Norway”。

9.4.0 曾将这个麻烦的名称映射为“norwegian-bokmal”,但事实证明这并非在所有 Windows 配置上都有效。现在改为推荐“Norwegian_Norway”。

关联记录 (1)
问题修复修复 EvalPlanQual 处理中使用已释放内存的问题

变更

修复 EvalPlanQual 处理中使用已释放内存的问题(Tom Lane)

在READ COMMITTED模式下,锁定或更新最近更新过的行的查询可能因此缺陷崩溃。

关联记录 (4)
问题修复避免在 EvalPlanQual 处理中试图获取元组锁时可能出现的死锁

变更

避免在 EvalPlanQual 处理中试图获取元组锁时可能出现的死锁(Álvaro Herrera、Mark Kirkwood)

关联记录 (1)
问题修复修复当某事务试图获取 FOR NO KEY EXCLUSIVE 元组锁而多个其他事务当前持有 FOR SHARE 锁时不等待的问题

变更

修复当某事务试图获取 FOR NO KEY EXCLUSIVE 元组锁而多个其他事务当前持有 FOR SHARE 锁时不等待的问题(Álvaro Herrera)

关联记录 (1)
性能改进 EXPLAIN 在大型范围表上的性能

变更

改进 EXPLAIN 在大型范围表上的性能(Tom Lane)

关联记录 (1)
问题修复修复jsonb的 Unicode 转义处理,并因此禁止\u0000

变更

修复jsonb的 Unicode 转义处理,并因此禁止\u0000(Tom Lane)

此前,JSON Unicode 转义\u0000被接受并按这六个字符存储;但这与输入\\u0000时存储的内容无法区分,造成歧义。此外,在期望得到去转义文本输出的场合(如->>操作符),该序列被打印为\u0000,不符合去除 JSON 转义的预期。(一致的行为需要输出零字节,但PostgreSQL不支持文本字符串中嵌入零字节。)9.4.0 中曾有一次不明智的尝试,试图通过调整 JSON 输出转换规则来改善这一状况;但这当然无法修复根本性的歧义,而且事实证明它破坏了 Unicode 转义序列的其他用法。我们撤销了那项修改,并为避免核心问题,在jsonb输入中拒绝\u0000。

如果jsonb列包含 9.4.0 存储的\u0000值,此后它将被读出为\\u0000,这是 9.4.0 为这种情况存储的数据的另一种有效解释。

json类型没有存储歧义问题,但确实存在去转义文本输出不一致的问题。因此,当需要转换为去转义形式时,json值中的\u0000现在也会被拒绝。此变更并不破坏在json列中存储\u0000的能力,只要不对这些值做任何处理。这与数据库编码不是 UTF8 时允许非 ASCII Unicode 转义的情况完全类似。

问题修复修复xpath()中的命名空间处理

变更

修复xpath()中的命名空间处理(Ali Akbar)

此前,如果命名空间声明附在输入xml值的祖先元素上而非被返回的特定元素上,xpath()调用产生的xml值就不会包含命名空间声明。我们将祖先声明传播下来,使结果在孤立考虑时也是正确的。

关联记录 (4)
问题修复修复范围操作符选择率估计中的各种疏漏

变更

修复范围操作符选择率估计中的各种疏漏(Emre Hasegeli)

此补丁修复了极端情况下 “unexpected operator NNNN” 规划器错误,并改进了其他一些情况下的选择率估计。

关联记录 (1)
改进恢复 GIN 索引项最大大小曾被无意间造成的缩减

变更

恢复 GIN 索引项最大大小曾被无意间造成的缩减(Heikki Linnakangas)

对于以前版本会接受的数据,9.4.0 可能报 “index row size exceeds maximum” 错误而失败。

问题修复修复重复重新扫描 GIN 索引期间查询时长的内存泄漏

变更

修复重复重新扫描 GIN 索引期间查询时长的内存泄漏(Heikki Linnakangas)

问题修复修复使用非零 gin_fuzzy_search_limit 时可能崩溃的问题

变更

修复使用非零 gin_fuzzy_search_limit 时可能崩溃的问题(Heikki Linnakangas)

问题修复针对逻辑解码的多项修复

变更

针对逻辑解码的多项修复(Andres Freund)

问题修复修复报告 wal_log_hints 设置变更的 WAL 参数变更记录的不正确重放

变更

修复报告 wal_log_hints 设置变更的 WAL 参数变更记录的不正确重放(Petr Jelinek)

改进将 “pgstat wait timeout” 警告消息改为 LOG 级别,并重新措辞使其更易理解

变更

将 “pgstat wait timeout” 警告消息改为 LOG 级别,并重新措辞使其更易理解(Tom Lane)

这条消息最初被认为基本属于不可能发生的情况,但它在我们较慢的 buildfarm 成员上出现得足够频繁,成了干扰。现已将其降为 LOG 级别,并在措辞上多下了一点功夫:现在它的内容为 “using stale statistics instead of current ones because stats collector is not responding”。

关联记录 (4)
改进当 macOS 的 setlocale() 在 postmaster 内部启动多余的额外线程时发出警告

变更

当 macOS 的 setlocale() 在 postmaster 内部启动多余的额外线程时发出警告(Noah Misch)

关联记录 (3)
问题修复修复 /etc/passwd 不可读时 libpq 的行为

变更

修复 /etc/passwd 不可读时 libpq 的行为(Tom Lane)

在执行 PQsetdbLogin() 期间,libpq 会试图确定用户的操作系统用户名,在大多数 Unix 平台上这需要读取 /etc/passwd。从 9.4 起,读取失败被视为硬错误。现已恢复以前的行为:只有当应用程序未提供要连接的数据库角色名时才失败。这支持在缺少 /etc/passwd 文件的 chroot 环境中运行。

改进改进 psql 特殊变量解析的一致性

变更

改进 psql 特殊变量解析的一致性(Tom Lane)

允许 ECHO_HIDDEN 和 ON_ERROR_ROLLBACK 使用 on 和 off 的变体拼写(如 1/0)。对 COMP_KEYWORD_CASE、ECHO、ECHO_HIDDEN、HISTCONTROL、ON_ERROR_ROLLBACK 和 VERBOSITY 的无法识别的值发出警告。对所有这些变量的所有值进行不区分大小写的识别;此前大小写敏感与不敏感的行为混杂在一起。

关联记录 (4)
问题修复修复 pg_dump 使其处理事件触发器上的注释时不失败

变更

修复 pg_dump 使其处理事件触发器上的注释时不失败(Tom Lane)

关联记录 (1)
改进允许并行 pg_dump 使用 --serializable-deferrable

变更

允许并行 pg_dump 使用 --serializable-deferrable(Kevin Grittner)

关联记录 (1)
改进防止备库提升为主库后 pg_basebackup -x/-X 创建的 WAL 文件被再次归档

变更

防止备库提升为主库后 pg_basebackup -x/-X 创建的 WAL 文件被再次归档(Andres Freund)

关联记录 (3)
改进安全地处理 contrib/tablefunc 的 connectby() 中的意外查询结果,尤其是 NULL

变更

安全地处理 contrib/tablefunc 的 connectby() 中的意外查询结果,尤其是 NULL(Michael Paquier)

此前 connectby() 遇到 NULL 键值时会崩溃。现在它会打印该行但不再进一步递归。

关联记录 (4)
改进大量清理 Coverity 静态代码分析器的警告

变更

大量清理 Coverity 静态代码分析器的警告(Andres Freund、Tatsuo Ishii、Marko Kreen、Tom Lane、Michael Paquier)

这些变更大多只是表面性的,但在某些情况下修复了极端情况的缺陷,例如内存不足失败后崩溃而不是正确报告错误。据信它们都不构成安全问题。

关联记录 (4)
改进允许 configure 环境中的 CFLAGS 覆盖自动提供的 CFLAGS

变更

允许 configure 环境中的 CFLAGS 覆盖自动提供的 CFLAGS(Tom Lane)

此前,configure 会把它自行选择的开关追加到用户指定的 CFLAGS 字符串末尾。由于大多数编译器从左到右处理开关,这意味着发生冲突时 configure 的选择会覆盖用户指定的标志。正确的方向应当相反,因此调整了逻辑,把用户的字符串放在末尾而不是开头。

改进使 pg_regress 成功退出时删除其创建的任何临时安装

变更

使 pg_regress 成功退出时删除其创建的任何临时安装(Tom Lane)

这使 make check-world 期间的磁盘空间用量大幅减少,因为该序列会创建大量临时安装。

关联记录 (4)
改进将 CST(中国标准时间)加入我们的时区缩写列表

变更

将 CST(中国标准时间)加入我们的时区缩写列表(Tom Lane)

改进将时区数据文件更新到 tzdata 发行版 2015a,涵盖智利和墨西哥的夏令时法规变更,以及冰岛的历史变更。

变更

将时区数据文件更新到 tzdata 发行版 2015a,涵盖智利和墨西哥的夏令时法规变更,以及冰岛的历史变更。

如何生成比较结果?

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

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

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