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

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

文档版本比较

POSTGRESQL · VERSION COMPARE

PostgreSQL 9.6.23 发布变化

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

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

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

完整发布变化

9.6.23

2021-08-12

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

9.6.23stable支持截止 2021-11-11

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

更彻底地禁止 SSL 重协商

已记录修复
CVE-2006-2313

在 psql 及其他客户端程序中,处理非法编码数据时避免越过字符串末尾

已记录修复

PostgreSQL 9.6.23

迁移与兼容性

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

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

安全更彻底地禁止 SSL 重协商

变更

更彻底地禁止 SSL 重协商(Michael Paquier)

SSL 重协商已被禁用一段时间了,但服务器仍会配合客户端发起的重协商请求。一个恶意构造的重协商请求可能导致服务器崩溃(见 OpenSSL 问题 CVE-2021-3449)。在允许这么做的 OpenSSL 版本(1.1.0h 及更新)上彻底禁用该特性。

关联记录 (4)
改进拒绝 SELECT ... GROUP BY GROUPING SETS (()) FOR UPDATE

变更

拒绝 SELECT ... GROUP BY GROUPING SETS (()) FOR UPDATE(Tom Lane)

这与带普通 GROUP BY 的 FOR UPDATE 被禁止一样,本应被禁止,但相应的测试未能正确处理空分组集。最终结果是执行器中的空指针解引用。

关联记录 (4)
改进拒绝 WITH 中的查询被改写为仅 NOTIFY 的情况

变更

拒绝 WITH 中的查询被改写为仅 NOTIFY 的情况(Tom Lane)

这类情况过去会崩溃。

关联记录 (4)
改进在 numeric 乘法中,如果结果小数点后位数会超过 16383,对其舍入而非报错

变更

在 numeric 乘法中,如果结果小数点后位数会超过 16383,对其舍入而非报错(Dean Rasheed)

关联记录 (4)
问题修复修复把 numeric 值提升到极大幂次时的边界错误和精度丢失

变更

修复把 numeric 值提升到极大幂次时的边界错误和精度丢失(Dean Rasheed)

关联记录 (4)
问题修复修复 to_char() 使用 EEEE 格式且 numeric 输入值小于 10^(-1001) 时的除零失败

变更

修复 to_char() 使用 EEEE 格式且 numeric 输入值小于 10^(-1001) 时的除零失败(Dean Rasheed)

关联记录 (4)
问题修复使 pg_size_pretty(bigint) 对负值的舍入方式与正值一致(也与 numeric 版本一致)

变更

使 pg_size_pretty(bigint) 对负值的舍入方式与正值一致(也与 numeric 版本一致)(Dean Rasheed、David Rowley)

关联记录 (4)
改进使 pg_filenode_relation(0, 0) 返回 NULL 而不是报错

变更

使 pg_filenode_relation(0, 0) 返回 NULL 而不是报错(Justin Pryzby)

关联记录 (4)
改进让 ALTER EXTENSION 在添加或删除成员对象时锁定扩展

变更

让 ALTER EXTENSION 在添加或删除成员对象时锁定扩展(Tom Lane)

原来的编码允许 ALTER EXTENSION ADD/DROP 与 DROP EXTENSION 并发发生,会导致崩溃或目录条目损坏。

关联记录 (4)
改进避免 REFRESH MATERIALIZED VIEW CONCURRENTLY 生成的查询中的别名冲突

变更

避免 REFRESH MATERIALIZED VIEW CONCURRENTLY 生成的查询中的别名冲突(Tom Lane、Bharath Rupireddy)

此命令在物化视图包含某些名称的列(特别是 mv 和 newdata)时会失败。

关联记录 (4)
问题修复修复 PREPARE TRANSACTION 对会话级与事务级锁冲突的正确检查

变更

修复 PREPARE TRANSACTION 对会话级与事务级锁冲突的正确检查(Tom Lane)

如果一个事务在同一个咨询锁 ID 值上同时持有会话级和事务级锁,它就不能被预备。这一限制没有被完整检查,可能导致 PREPARE TRANSACTION 期间发生 PANIC。

关联记录 (4)
问题修复修复目标角色在 RLS 策略中被列出多于一次时 DROP OWNED BY 的错误行为

变更

修复目标角色在 RLS 策略中被列出多于一次时 DROP OWNED BY 的错误行为(Tom Lane)

关联记录 (4)
改进在 DROP OWNED BY 期间从 RLS 策略中移除角色时,跳过不必要的错误测试

变更

在 DROP OWNED BY 期间从 RLS 策略中移除角色时,跳过不必要的错误测试(Tom Lane)

值得注意的是,这修复了某些必须成为超级用户才能使用 DROP OWNED BY 的情况。

关联记录 (4)
改进允许以事务方式更新索引状态标志

变更

允许以事务方式更新索引状态标志(Michael Paquier、Andrey Lepikhov)

这避免了处理并非真正不可变的索引谓词时的失败。虽然这不被视为受支持的情况,但此处使用非事务更新的原有原因早已不存在,因此不妨改掉。

关联记录 (4)
问题修复避免 CREATE DOMAIN 或 ALTER DOMAIN 出现在缓存计划中时损坏计划缓存条目

变更

避免 CREATE DOMAIN 或 ALTER DOMAIN 出现在缓存计划中时损坏计划缓存条目(Tom Lane)

关联记录 (4)
改进当 postgresql.conf 中相关条目被移除时,让 pg_settings.pending_restart 显示为 true

变更

当 postgresql.conf 中相关条目被移除时,让 pg_settings.pending_restart 显示为 true(Álvaro Herrera)

pending_restart 能正确显示某个不重启 postmaster 就无法更改的条目被修改的情况,但不能显示该条目被完全移除的情况。

关联记录 (4)
问题修复修复新备库跟随新主库时的一种边界失败

变更

修复新备库跟随新主库时的一种边界失败(Dilip Kumar、Robert Haas)

在条件的一种狭窄组合下,备库可能最终试图跟随错误的 WAL 时间线。

关联记录 (4)
改进当 WAL 重放一条事务中止记录导致文件截断时,更新最小恢复点

变更

当 WAL 重放一条事务中止记录导致文件截断时,更新最小恢复点(Fujii Masao)

文件截断是不可逆的,因此在该记录之前的点停止恢复不再安全。事务提交的相应情况多年前已修复,但这一处被遗漏了。

关联记录 (4)
改进确保备库服务器的启动进程在等待 WAL 到达期间能及时响应关闭信号

变更

确保备库服务器的启动进程在等待 WAL 到达期间能及时响应关闭信号(Fujii Masao、Soumyadeep Chakraborty)

关联记录 (4)
改进加锁以避免在另一进程并发写入时读到不正确的 relmapper 数据

变更

加锁以避免在另一进程并发写入时读到不正确的 relmapper 数据(Heikki Linnakangas)

关联记录 (4)
问题修复修复推测插入的逻辑解码中的错误情况和内存泄漏

变更

修复推测插入的逻辑解码中的错误情况和内存泄漏(Dilip Kumar)

关联记录 (4)
问题修复修复 CREATE TABLE ... AS EXECUTE 某些错误情况下的计划缓存引用泄漏

变更

修复 CREATE TABLE ... AS EXECUTE 某些错误情况下的计划缓存引用泄漏(Tom Lane)

关联记录 (4)
问题修复修复释放 BackgroundWorkerSlots 时可能的竞态条件

变更

修复释放 BackgroundWorkerSlots 时可能的竞态条件(Tom Lane)

这很可能没有修复 Intel 硬件上任何可观察的 bug,但内存排序规则较弱的机器可能出现问题。

关联记录 (4)
问题修复修复排序代码中的潜在崩溃

变更

修复排序代码中的潜在崩溃(Ronan Dunklau)

有一条代码路径可能试图释放空指针。这种情况在核心服务器对排序的使用中似乎无法达到,但扩展或许能触发它。

关联记录 (4)
改进防止 SP-GiST 索引插入中的无限循环

变更

防止 SP-GiST 索引插入中的无限循环(Tom Lane)

如果 INCLUDE 列占用足够多的空间以致叶子索引元组永远放不进一个页,text_ops 操作符类就会陷入徒劳地试图放下元组的无限循环。虽然 v11 之前的版本没有 INCLUDE 列,还是把这个防循环修复向后移植过来,因为它似乎是对操作符类 bug 的良好防御。

关联记录 (4)
改进确保 SP-GiST 索引插入可以被查询取消请求终止

变更

确保 SP-GiST 索引插入可以被查询取消请求终止(Tom Lane、Álvaro Herrera)

关联记录 (4)
问题修复修复可能导致 PL/pgSQL 把未指定 STRICT 的 INTO 子句当作指定了的未初始化变量 bug

变更

修复可能导致 PL/pgSQL 把未指定 STRICT 的 INTO 子句当作指定了的未初始化变量 bug(Tom Lane)

关联记录 (4)
改进libpq 的打印函数中发生内存不足失败时不再中止进程

变更

libpq 的打印函数中发生内存不足失败时不再中止进程(Tom Lane)

关联记录 (4)
改进在 ecpg 中,允许把 numeric 值 INT_MIN(通常为 -2147483648)转换为整数

变更

在 ecpg 中,允许把 numeric 值 INT_MIN(通常为 -2147483648)转换为整数(John Naylor)

关联记录 (4)
安全在 psql 及其他客户端程序中,处理非法编码数据时避免越过字符串末尾

变更

在 psql 及其他客户端程序中,处理非法编码数据时避免越过字符串末尾(Tom Lane)

字符串末尾附近一个编码不正确的多字节字符,可能导致各种处理循环越过字符串的结束 NUL 运行,后果从无可察觉的问题到程序崩溃不等,取决于后面的内存中碰巧有什么。这让人想起 CVE-2006-2313,不过这些特定情况似乎没有值得注意的安全后果。

关联记录 (4)
改进避免在不同时区创建的归档文件上运行 pg_restore 时出现的 “invalid creation date in header” 警告

变更

避免在不同时区创建的归档文件上运行 pg_restore 时出现的 “invalid creation date in header” 警告(Tom Lane)

关联记录 (4)
改进让 pg_upgrade 保留旧安装的 oldestXID 值

变更

让 pg_upgrade 保留旧安装的 oldestXID 值(Bertrand Drouvot)

此前,新安装的 oldestXID 会被设置为一个足够老的值,(通常)会立即触发防回卷自动清理。从性能角度看这不可取;更糟的是,使用较大 autovacuum_freeze_max_age 值的安装可能在升级后不久遭遇不必要的强制停机。

关联记录 (4)
改进扩展 pg_upgrade 以检测并警告应升级的扩展

变更

扩展 pg_upgrade 以检测并警告应升级的扩展(Bruce Momjian)

现在会生成一个脚本文件,其中包含把扩展升级到新安装中视为默认版本所需的 ALTER EXTENSION UPDATE 命令。

关联记录 (4)
改进在 contrib/postgres_fdw 中,避免出错后尝试目录查找

变更

在 contrib/postgres_fdw 中,避免出错后尝试目录查找(Tom Lane)

虽然这通常能工作,但不太安全,因为错误可能已使目录访问失效。此修复的一个副作用是,有关数据转换错误的消息现在会提及查询的表和列别名(如果使用了),而不是外部表或列的真实底层名称。

关联记录 (4)
改进在 contrib/pgcrypto 中,避免与 OpenSSL 的符号名冲突

变更

在 contrib/pgcrypto 中,避免与 OpenSSL 的符号名冲突(Tom Lane)

使用 SHA224 哈希的操作在 valgrind 检查下可能显示失败。看起来这只是对齐填充字节的踩踏,因此没有实际后果,但为了保险起见予以修复。

改进改进隔离测试基础设施

变更

改进隔离测试基础设施(Tom Lane、Michael Paquier)

允许为隔离测试步骤标注预期的完成顺序。这使得原本有竞态的测试用例能获得稳定结果,而无需我们此前用来抵御竞态条件的长延迟(那并不完全成功)。允许非带引号标识符作为隔离测试会话/步骤名(此前所有此类名称都必须加双引号)。检测并警告隔离测试中未使用的步骤。改进隔离测试中查询结果的显示。移除 isolationtester 的 “dry-run” 模式。移除 isolationtester 自身的内存泄漏。

关联记录 (4)
性能降低缓存踩踏测试的开销

变更

降低缓存踩踏测试的开销(Tom Lane)

关联记录 (4)
问题修复修复 PL/Python 回归测试在 Python 3.10 下通过的问题

变更

修复 PL/Python 回归测试在 Python 3.10 下通过的问题(Honza Horak)

关联记录 (4)
改进使 printf("%s", NULL) 打印 (null) 而不是崩溃

变更

使 printf("%s", NULL) 打印 (null) 而不是崩溃(Tom Lane)

这改善了边界情况下服务器的健壮性,并使我们的 printf 实现与常见库保持一致。

关联记录 (4)
问题修复修复时间点恢复在 ROLLBACK PREPARED 记录处停止时错误的日志消息

变更

修复时间点恢复在 ROLLBACK PREPARED 记录处停止时错误的日志消息(Simon Riggs)

关联记录 (4)
改进澄清涉及“非负”值的错误消息

变更

澄清涉及“非负”值的错误消息(Bharath Rupireddy)

关联记录 (4)
问题修复修复 configure 在 OpenLDAP 2.5 下的工作,该版本不再有单独的 libldap_r 库

变更

修复 configure 在 OpenLDAP 2.5 下的工作,该版本不再有单独的 libldap_r 库(Adrian Ho、Tom Lane)

如果没有 libldap_r 库,我们现在静默假定 libldap 是线程安全的。

关联记录 (4)
改进添加新的 make 目标 world-bin 和 install-world-bin

变更

添加新的 make 目标 world-bin 和 install-world-bin(Andrew Dunstan)

它们分别与 world 和 install-world 相同,只是不构建或安装文档。

关联记录 (4)
问题修复修复 TAP 测试的 make 规则(prove_installcheck)在 PGXS 用法下工作的问题

变更

修复 TAP 测试的 make 规则(prove_installcheck)在 PGXS 用法下工作的问题(Andrew Dunstan)

关联记录 (4)
改进避免假定 GSSAPI 库返回的字符串以空字符结尾

变更

避免假定 GSSAPI 库返回的字符串以空字符结尾(Tom Lane)

GSSAPI 规范提供字符串指针和长度。实践中字符串后面的下一个字节通常是零,因此我们原来的编码实际并没有失败;但确实有 AddressSanitizer 报告的记录。

关联记录 (4)
改进允许在 MSVC 上以 GSSAPI 构建

变更

允许在 MSVC 上以 GSSAPI 构建(Michael Paquier)

修复与现代 Kerberos 构建的各种不兼容。

关联记录 (4)
改进在 MSVC 构建中,如果指定过 --with-pgport,把它包含在 pg_config 报告的 configure 选项集合中

变更

在 MSVC 构建中,如果指定过 --with-pgport,把它包含在 pg_config 报告的 configure 选项集合中(Andrew Dunstan)

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

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

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

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