pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
文档版本对比
POSTGRESQL · VERSION COMPARE
本次发布的完整功能、修复与兼容性说明,以及它们在其他版本中的关联记录。
从起始版本之后,看到目标版本为止。大版本名称代表该系列首个正式版本。
收录 PostgreSQL 9.0 起的 17 个大版本、352 份发布说明;数据更新于 2026-09-26。
本次发布的全部变更
2015-02-05
9.4.1 历史版本维护截止 2020-02-13
| CVE / 问题 | 严重程度 | 修复版本 |
|---|---|---|
| CVE-2015-0244 修复出错后前端/后端协议可能失去同步的问题 | 8.1 | 9.4.1 |
| CVE-2014-0067 锁定 Windows 上回归测试的临时安装 | 7.0 | 9.4.1 |
| CVE-2015-0243 修复contrib/pgcrypto中的缓冲区越界 | 6.5 | 9.4.1 |
| CVE-2015-0242 修复替换实现的*printf()函数中的缓冲区越界 | 4.2 | 9.4.1 |
| CVE-2015-0241 修复to_char()中的缓冲区越界 | 4.2 | 9.4.1 |
| CVE-2014-8161 修复通过约束违反错误消息的信息泄露 | 3.1 | 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()中的缓冲区越界(Bruce Momjian)
当to_char()处理要求数字位数很多的数字格式模板时,PostgreSQL会读取越过缓冲区末尾。当处理恶意构造的时间戳格式模板时,PostgreSQL会写入越过缓冲区末尾。两种情况都可能导致服务器崩溃。我们尚未排除导致权限提升攻击的可能性,尽管这种攻击似乎不太可能。(CVE-2015-0241)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复替换实现的*printf()函数中的缓冲区越界(Tom Lane)
PostgreSQL包含printf及相关函数的替换实现。当代码格式化浮点数(转换说明符e、E、f、F、g或G)且请求的精度超过约 500 时,会发生栈缓冲区越界。这会导致服务器崩溃,我们尚未排除导致权限提升攻击的可能性。数据库用户可以通过to_char()SQL 函数触发这种缓冲区越界。虽然这是唯一受影响的核心PostgreSQL功能,但使用 printf 族函数的扩展模块也可能存在风险。
此问题主要影响 Windows 上的PostgreSQL。PostgreSQL在系统实现足够完善时会使用系统实现,而其他现代平台上正是如此。(CVE-2015-0242)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复contrib/pgcrypto中的缓冲区越界(Marko Tiikkaja、Noah Misch)
pgcrypto模块中内存大小跟踪的错误导致了栈缓冲区越界和对未初始化内存内容的不当依赖。缓冲区越界情况可能导致服务器崩溃,我们尚未排除导致权限提升攻击的可能性。(CVE-2015-0243)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复出错后前端/后端协议可能失去同步的问题(Heikki Linnakangas)
如果服务器在从客户端读取协议消息中途发生任何错误,它可能失去同步,错误地把消息数据的一部分解释为新的协议消息。能够在命令参数中提交恶意构造二进制数据的攻击者可能借此注入自己的 SQL 命令。语句超时和查询取消是触发此场景最可能的错误来源。尤其容易受影响的是既使用超时又将任意用户构造数据作为二进制查询参数提交的应用程序。禁用语句超时会降低但不能消除被利用的风险。感谢 Emil Lenngren 报告此问题。(CVE-2015-0244)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复通过约束违反错误消息的信息泄露(Stephen Frost)
某些服务器错误消息会显示违反约束(如唯一约束)的列的值。如果用户对该表的所有列没有SELECT权限,这可能意味着暴露用户不应看到的值。我们调整了代码,使值仅在来自 SQL 命令本身或用户可以查询到时才显示。(CVE-2014-8161)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
锁定 Windows 上回归测试的临时安装(Noah Misch)
使用 SSPI 认证,只允许启动测试套件的操作系统用户连接。这在 Windows 上关闭了此前已在其他平台上关闭的同一漏洞,即其他用户可能连接到测试 postmaster。(CVE-2014-0067)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
处理名为“Norwegian (Bokmål)”的 Windows 区域(Heikki Linnakangas)
非 ASCII 区域名是有问题的,因为不清楚应该用什么编码表示它们。将这个麻烦的区域名映射为纯 ASCII 别名“Norwegian_Norway”。
9.4.0 曾将这个麻烦的名称映射为“norwegian-bokmal”,但事实证明这并非在所有 Windows 配置上都有效。现在改为推荐“Norwegian_Norway”。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 EvalPlanQual 处理中使用已释放内存的问题(Tom Lane)
在READ COMMITTED模式下,锁定或更新最近更新过的行的查询可能因此缺陷崩溃。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
避免在 EvalPlanQual 处理中试图获取元组锁时可能出现的死锁(Álvaro Herrera、Mark Kirkwood)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复当某事务试图获取 FOR NO KEY EXCLUSIVE 元组锁而多个其他事务当前持有 FOR SHARE 锁时不等待的问题(Álvaro Herrera)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
改进 EXPLAIN 在大型范围表上的性能(Tom Lane)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复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()中的命名空间处理(Ali Akbar)
此前,如果命名空间声明附在输入xml值的祖先元素上而非被返回的特定元素上,xpath()调用产生的xml值就不会包含命名空间声明。我们将祖先声明传播下来,使结果在孤立考虑时也是正确的。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复范围操作符选择率估计中的各种疏漏(Emre Hasegeli)
此补丁修复了极端情况下 “unexpected operator NNNN” 规划器错误,并改进了其他一些情况下的选择率估计。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
恢复 GIN 索引项最大大小曾被无意间造成的缩减(Heikki Linnakangas)
对于以前版本会接受的数据,9.4.0 可能报 “index row size exceeds maximum” 错误而失败。
变更
修复重复重新扫描 GIN 索引期间查询时长的内存泄漏(Heikki Linnakangas)
变更
修复使用非零 gin_fuzzy_search_limit 时可能崩溃的问题(Heikki Linnakangas)
变更
针对逻辑解码的多项修复(Andres Freund)
变更
修复报告 wal_log_hints 设置变更的 WAL 参数变更记录的不正确重放(Petr Jelinek)
变更
将 “pgstat wait timeout” 警告消息改为 LOG 级别,并重新措辞使其更易理解(Tom Lane)
这条消息最初被认为基本属于不可能发生的情况,但它在我们较慢的 buildfarm 成员上出现得足够频繁,成了干扰。现已将其降为 LOG 级别,并在措辞上多下了一点功夫:现在它的内容为 “using stale statistics instead of current ones because stats collector is not responding”。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
当 macOS 的 setlocale() 在 postmaster 内部启动多余的额外线程时发出警告(Noah Misch)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 /etc/passwd 不可读时 libpq 的行为(Tom Lane)
在执行 PQsetdbLogin() 期间,libpq 会试图确定用户的操作系统用户名,在大多数 Unix 平台上这需要读取 /etc/passwd。从 9.4 起,读取失败被视为硬错误。现已恢复以前的行为:只有当应用程序未提供要连接的数据库角色名时才失败。这支持在缺少 /etc/passwd 文件的 chroot 环境中运行。
变更
改进 psql 特殊变量解析的一致性(Tom Lane)
允许 ECHO_HIDDEN 和 ON_ERROR_ROLLBACK 使用 on 和 off 的变体拼写(如 1/0)。对 COMP_KEYWORD_CASE、ECHO、ECHO_HIDDEN、HISTCONTROL、ON_ERROR_ROLLBACK 和 VERBOSITY 的无法识别的值发出警告。对所有这些变量的所有值进行不区分大小写的识别;此前大小写敏感与不敏感的行为混杂在一起。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 pg_dump 使其处理事件触发器上的注释时不失败(Tom Lane)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
允许并行 pg_dump 使用 --serializable-deferrable(Kevin Grittner)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
防止备库提升为主库后 pg_basebackup -x/-X 创建的 WAL 文件被再次归档(Andres Freund)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
安全地处理 contrib/tablefunc 的 connectby() 中的意外查询结果,尤其是 NULL(Michael Paquier)
此前 connectby() 遇到 NULL 键值时会崩溃。现在它会打印该行但不再进一步递归。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
大量清理 Coverity 静态代码分析器的警告(Andres Freund、Tatsuo Ishii、Marko Kreen、Tom Lane、Michael Paquier)
这些变更大多只是表面性的,但在某些情况下修复了极端情况的缺陷,例如内存不足失败后崩溃而不是正确报告错误。据信它们都不构成安全问题。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
允许 configure 环境中的 CFLAGS 覆盖自动提供的 CFLAGS(Tom Lane)
此前,configure 会把它自行选择的开关追加到用户指定的 CFLAGS 字符串末尾。由于大多数编译器从左到右处理开关,这意味着发生冲突时 configure 的选择会覆盖用户指定的标志。正确的方向应当相反,因此调整了逻辑,把用户的字符串放在末尾而不是开头。
变更
使 pg_regress 成功退出时删除其创建的任何临时安装(Tom Lane)
这使 make check-world 期间的磁盘空间用量大幅减少,因为该序列会创建大量临时安装。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
将 CST(中国标准时间)加入我们的时区缩写列表(Tom Lane)
变更
将时区数据文件更新到 tzdata 发行版 2015a,涵盖智利和墨西哥的夏令时法规变更,以及冰岛的历史变更。
试试其他关键词,或。
对比以 PostgreSQL 发行说明为依据,汇总起始版本之后、目标版本及之前的变更,支持同一大版本内的小版本更新,以及跨大版本升级。跨大版本时,旧分支的维护记录只纳入到下一大版本首次发布之日,所有记录均不晚于目标版本的发布日期。大版本名称(如 18)指首个正式版本(18.0);测试版与开发快照会单独标注。
条目正文来自本站中文手册,版本清单、条目覆盖与提交依据逐一核对上游英文原文。每条变更保留完整说明与原文链接;分类用于辅助浏览,具体影响、适用条件与升级操作请阅读条目正文和各版本的升级说明。
同一修复可能回补到多个版本分支。对比会保守合并可确认相同的条目,并保留各分支完整说明;已知由起始版本包含的修复会排除。一条说明包含多个独立修复时,只有全部已包含才排除。大版本新功能不因与旧版补丁存在提交关联而合并,不能确认相同的条目继续保留。这是发行说明的累计差异,不能覆盖二进制程序之间的每一处代码变化。
CVE 独立依据 PostgreSQL 官方安全公告与漏洞记录计算:起始版本受影响、目标版本已修复或不受影响的漏洞才计入,按编号去重。目标版本仍受影响的漏洞另行提示;安全变更条数与 CVE 数量分别统计。
交互参考 pgversions.com 与 pgversionreport,内容来自 PostgreSQL 发行说明。更多历史资料见发行说明归档。