pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
文档版本对比
POSTGRESQL · VERSION COMPARE
本次发布的完整功能、修复与兼容性说明,以及它们在其他版本中的关联记录。
从起始版本之后,看到目标版本为止。大版本名称代表该系列首个正式版本。
收录 PostgreSQL 9.0 起的 17 个大版本、352 份发布说明;数据更新于 2026-09-26。
本次发布的全部变更
2021-05-13
9.6.22 历史版本维护截止 2021-11-11
| CVE / 问题 | 严重程度 | 修复版本 |
|---|---|---|
| CVE-2021-32028 修复 INSERT ... ON CONFLICT ... UPDATE 目标列表中“垃圾”列的处理不当 | 6.5 | 9.6.22 |
| CVE-2021-32027 防止数组下标计算中的整数溢出 | 6.5 | 9.6.22 |
对于运行 9.6.X 的用户,不需要转储/恢复。
不过,如果你是从 9.6.21 之前的版本升级,参见第 E.4 节。
变更
防止数组下标计算中的整数溢出(Tom Lane)
数组代码此前不会对数组下界加长度发生整数溢出的情况报错。这导致数组中靠后的条目变得不可访问(因为它们的下标无法写成整数),但更重要的是它干扰了后续的赋值操作。这可能导致内存覆写,随之而来的是崩溃或不希望的数据修改。(CVE-2021-32027)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 INSERT ... ON CONFLICT ... UPDATE 目标列表中“垃圾”列的处理不当(Tom Lane)
如果 UPDATE 列表包含多列子选择(它们除了正常结果之外还会产生垃圾列),UPDATE 路径最终会存储包含这些额外垃圾列值的元组。短期内这相当无害,但如果以后向表中添加新列,这些值就会变得可访问,若与所添加列的数据类型不匹配,可能导致故障。
此外,在支持跨分区更新的版本中,这种情况触发的跨分区更新有相反的问题:垃圾列被从目标列表中移除,通常因多列子选择机制故障导致立即崩溃。(CVE-2021-32028)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
允许 ALTER ROLE/DATABASE ... SET 设置 role、session_authorization 和 temp_buffers 参数(Tom Lane)
此前,过于严格的合法性检查可能拒绝这些命令,即使这些值在之后使用时本可正常工作。这给转储/恢复和升级场景带来了命令顺序隐患。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复把 COLLATE 表达式的结果强制转换为不可排序类型时的 bug(Tom Lane)
这产生了一个 COLLATE 看似应用于不可排序值的解析树。虽然这通常没有实际影响(因为 COLLATE 在运行时不起作用),但可能构造出在转储/恢复期间被拒绝的视图。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
禁止通过“快速路径”线上协议消息调用窗口函数和过程(Tom Lane)
这里只支持普通函数。尝试调用聚合函数虽然已经会失败,但调用窗口函数会导致崩溃,而调用过程只有在过程不做事务控制时才能工作。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
扩展 pg_identify_object_as_address() 以支持事件触发器(Joel Jacobson)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 to_char() 对负区间使用罗马数字月份格式代码的处理(Julien Rouhaud)
此前,这类情况通常会导致崩溃。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 BRE 模式正则表达式中解析 \{ 量词时使用未初始化值的问题(Tom Lane)m,n\}
这个错误可能导致量词表现为非贪婪,即表现得像完整正则表达式中的 { 量词那样。m,n}?
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
避免在估算带有很长固定前缀的正则表达式的选择率时除零(Tom Lane)
这通常会导致 NaN 选择率值,引起断言失败或规划器行为异常。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 BRIN 索引位图扫描中越表末访问的错误(Tomas Vondra)
如果 BRIN 索引使用的页范围大小不是 2 的幂,在某些边界情况下位图扫描可能试图取回超出表实际末尾的页,导致 “could not open file” 错误。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
确保在关闭备库服务器的启动进程期间释放锁(Fujii Masao)
当备库服务器仍在恢复期间被关闭时,某些锁可能仍被持有。这会导致调试构建中的断言失败;生产构建中是否会有严重后果尚不清楚。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
确保在较新的 FreeBSD 上默认使用 wal_sync_method = fdatasync(Thomas Munro)
FreeBSD 13 支持 open_datasync,它通常会变成默认选择。但尚不清楚这对 Postgres 是否真的是改进,因此暂时保留原有默认值。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
确保在分离 DSM 段被中断时完成清理(Thomas Munro)
这个错误可能导致并行查询之后临时文件未被及时清理。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复服务器中若干轻微的内存泄漏(Tom Lane、Andres Freund)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
防止收到长度损坏的 ParameterDescription 消息时 libpq 陷入无限循环(Tom Lane)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 psql,恢复 \connect service= 的先前行为(Tom Lane)something
此前的一次 bug 修复导致在这种场景下环境变量(如 PGPORT)会覆盖服务文件中的条目。恢复先前行为,即优先级相反。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 psql 的 \e 及相关命令检测文件修改时的竞态条件(Laurenz Albe)
打字极快的用户可能骗过该代码基于文件时间戳的临时编辑文件是否被修改的检测。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 pg_restore 漏检文件版本的问题(Tom Lane)
从不可寻址的源读取自定义格式归档时,pg_restore 忽略了检查归档版本。如果被喂给比它所支持的更新版本的归档,之后会混乱地失败。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
为 pg_upgrade 增加更多对包含不可升级数据类型的用户表的检查(Tom Lane)
修复某些不可升级数据类型嵌入在容器类型(如数组或范围)内部的检测。同时禁止升级用户表中包含系统定义复合类型的列,因为这些类型的 OID 跨版本不稳定。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 pg_waldump 在生成逐记录统计时对 XACT 记录的计数(Kyotaro Horiguchi)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 contrib/amcheck 不再对同时设置了元组标志 HEAP_XMAX_LOCK_ONLY 和 HEAP_KEYS_UPDATED 报怨(Julien Rouhaud)
这是 SELECT FOR UPDATE 之后的一种有效状态。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
调整 VPATH 构建规则以支持较新的 Oracle Developer Studio 编译器版本(Noah Misch)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 Solaris 上 PL/Python 对 Python 3 的测试(Noah Misch)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
试试其他关键词,或。
对比以 PostgreSQL 发行说明为依据,汇总起始版本之后、目标版本及之前的变更,支持同一大版本内的小版本更新,以及跨大版本升级。跨大版本时,旧分支的维护记录只纳入到下一大版本首次发布之日,所有记录均不晚于目标版本的发布日期。大版本名称(如 18)指首个正式版本(18.0);测试版与开发快照会单独标注。
条目正文来自本站中文手册,版本清单、条目覆盖与提交依据逐一核对上游英文原文。每条变更保留完整说明与原文链接;分类用于辅助浏览,具体影响、适用条件与升级操作请阅读条目正文和各版本的升级说明。
同一修复可能回补到多个版本分支。对比会保守合并可确认相同的条目,并保留各分支完整说明;已知由起始版本包含的修复会排除。一条说明包含多个独立修复时,只有全部已包含才排除。大版本新功能不因与旧版补丁存在提交关联而合并,不能确认相同的条目继续保留。这是发行说明的累计差异,不能覆盖二进制程序之间的每一处代码变化。
CVE 独立依据 PostgreSQL 官方安全公告与漏洞记录计算:起始版本受影响、目标版本已修复或不受影响的漏洞才计入,按编号去重。目标版本仍受影响的漏洞另行提示;安全变更条数与 CVE 数量分别统计。
交互参考 pgversions.com 与 pgversionreport,内容来自 PostgreSQL 发行说明。更多历史资料见发行说明归档。