文档版本比较
POSTGRESQL · VERSION COMPARE
PostgreSQL 10.18 发布变化
此版本的完整功能、修复与兼容性说明,以及其他版本的关联记录。
包括起始版本之后至目标版本的变化。大版本号表示该分支的首个版本。
从数据库输出识别起始版本
完整发布变化
10.18
2021-08-12
10.18stable支持截止 2022-11-10
安全变化
| CVE / 问题 | 严重程度 | 修复版本 | 所选版本状态 |
|---|---|---|---|
| CVE-2021-3449 更彻底地禁止 SSL 重新协商 | 已记录修复 | ||
| CVE-2006-2313 在 psql 和其他客户端程序中,避免处理编码无效的数据时越过字符串末尾 | 已记录修复 |
PostgreSQL 10.18
迁移与兼容性
对于运行 10.X 的用户,不需要执行导出/恢复。
但是,如果是从早于 10.16 的版本升级,请参见第 E.8 节。
安全更彻底地禁止 SSL 重新协商
变更
更彻底地禁止 SSL 重新协商(Michael Paquier)
虽然 SSL 重新协商已被禁用一段时间,但服务器仍会配合客户端发起的重新协商请求。恶意构造的重新协商请求可能导致服务器崩溃(参见 OpenSSL 问题 CVE-2021-3449)。在允许完全禁用此功能的 OpenSSL 版本(即 1.1.0h 及更新版本)上,将其彻底禁用。
改进拒绝 SELECT ... GROUP BY GROUPING SETS (()) FOR UPDATE
变更
拒绝 SELECT ... GROUP BY GROUPING SETS (()) FOR UPDATE(Tom Lane)
正如不允许将 FOR UPDATE 与普通 GROUP BY 一起使用一样,这种情况也应被禁止,但相关检查未能正确处理空分组集。最终结果会是执行器中的空指针解引用。
关联记录 (4)
改进拒绝 WITH 中的查询被重写为仅包含 NOTIFY 的情况
变更
拒绝 WITH 中的查询被重写为仅包含 NOTIFY 的情况(Tom Lane)
以前,这些情况会导致崩溃。
改进在 numeric 乘法中,如果结果的小数点后超过 16383 位,则对结果进行舍入,而不报错
变更
在 numeric 乘法中,如果结果的小数点后超过 16383 位,则对结果进行舍入,而不报错(Dean Rasheed)
问题修复修复对 numeric 值计算极大次幂时的边界情况错误和精度损失
变更
修复对 numeric 值计算极大次幂时的边界情况错误和精度损失(Dean Rasheed)
问题修复修复 to_char() 使用 EEEE 格式且输入的 numeric 值小于 10^(-1001) 时的除零错误
变更
修复 to_char() 使用 EEEE 格式且输入的 numeric 值小于 10^(-1001) 时的除零错误(Dean Rasheed)
关联记录 (4)
- 相同变化PostgreSQL 13.4 · 修复 to_char() 使用 EEEE 格式且输入的 numeric 值小于 10^(-1001) 时的除零错误
- 相同变化PostgreSQL 12.8 · 修复 to_char() 使用 EEEE 格式且输入的 numeric 值小于 10^(-1001) 时的除零错误
- 相同变化PostgreSQL 11.13 · 修复 to_char() 使用 EEEE 格式且输入的 numeric 值小于 10^(-1001) 时的除零错误
- 相同变化PostgreSQL 9.6.23 · 修复 to_char() 使用 EEEE 格式且 numeric 输入值小于 10^(-1001) 时的除零失败
问题修复修复 pg_size_pretty(bigint),使其对负值的舍入与对正值的舍入方式一致(也与 numeric 版本一致)
变更
修复 pg_size_pretty(bigint),使其对负值的舍入与对正值的舍入方式一致(也与 numeric 版本一致)(Dean Rasheed,David Rowley)
关联记录 (4)
- 相同变化PostgreSQL 13.4 · 修复 pg_size_pretty(bigint),使其对负值的舍入与对正值的舍入方式一致(也与 numeric 版本一致)
- 相同变化PostgreSQL 12.8 · 修复 pg_size_pretty(bigint),使其对负值的舍入与对正值的舍入方式一致(也与 numeric 版本一致)
- 相同变化PostgreSQL 11.13 · 修复 pg_size_pretty(bigint),使其对负值的舍入与对正值的舍入方式一致(也与 numeric 版本一致)
- 相同变化PostgreSQL 9.6.23 · 使 pg_size_pretty(bigint) 对负值的舍入方式与正值一致(也与 numeric 版本一致)
改进使 pg_filenode_relation(0, 0) 返回 NULL,而不报错
变更
使 pg_filenode_relation(0, 0) 返回 NULL,而不报错(Justin Pryzby)
改进使 ALTER EXTENSION 在添加或移除成员对象时锁定扩展
变更
使 ALTER EXTENSION 在添加或移除成员对象时锁定扩展(Tom Lane)
以前的代码允许 ALTER EXTENSION ADD/DROP 与 DROP EXTENSION 并发执行,导致崩溃或目录条目损坏。
问题修复修复 ALTER SUBSCRIPTION,使其拒绝空的槽名称
变更
修复 ALTER SUBSCRIPTION,使其拒绝空的槽名称(Japin Li)
改进避免为 REFRESH MATERIALIZED VIEW CONCURRENTLY 生成的查询中的别名冲突
变更
避免为 REFRESH MATERIALIZED VIEW CONCURRENTLY 生成的查询中的别名冲突(Tom Lane,Bharath Rupireddy)
如果物化视图包含某些名称的列,尤其是 mv 和 newdata,此命令就会失败。
关联记录 (4)
- 相同变化PostgreSQL 13.4 · 避免为 REFRESH MATERIALIZED VIEW CONCURRENTLY 生成的查询中的别名冲突
- 相同变化PostgreSQL 12.8 · 避免为 REFRESH MATERIALIZED VIEW CONCURRENTLY 生成的查询中的别名冲突
- 相同变化PostgreSQL 11.13 · 避免为 REFRESH MATERIALIZED VIEW CONCURRENTLY 生成的查询中的别名冲突
- 相同变化PostgreSQL 9.6.23 · 避免 REFRESH MATERIALIZED VIEW CONCURRENTLY 生成的查询中的别名冲突
问题修复修复 PREPARE TRANSACTION,使其正确检查会话生命周期锁与事务生命周期锁之间的冲突
变更
修复 PREPARE TRANSACTION,使其正确检查会话生命周期锁与事务生命周期锁之间的冲突(Tom Lane)
如果一个事务在同一个咨询锁 ID 值上同时持有会话生命周期锁和事务生命周期锁,就不能预备该事务。以前没有完整检查这一限制,可能导致 PREPARE TRANSACTION 期间发生 PANIC。
问题修复修复目标角色在 RLS 策略中被列出多次时 DROP OWNED BY 的异常行为
变更
修复目标角色在 RLS 策略中被列出多次时 DROP OWNED BY 的异常行为(Tom Lane)
改进在 DROP OWNED BY 期间从 RLS 策略中移除角色时,跳过不必要的错误检查
变更
在 DROP OWNED BY 期间从 RLS 策略中移除角色时,跳过不必要的错误检查(Tom Lane)
值得一提的是,这修复了某些必须是超级用户才能使用 DROP OWNED BY 的情况。
改进允许以事务方式更新索引状态标志
变更
允许以事务方式更新索引状态标志(Michael Paquier,Andrey Lepikhov)
这可以避免处理实际上并非不可变的索引谓词时发生失败。虽然这种情况不被视为受支持的用法,但这里最初采用非事务更新的原因早已不复存在,因此不妨进行修改。
问题修复避免缓存计划中出现 CREATE DOMAIN 或 ALTER DOMAIN 时损坏计划缓存条目
变更
避免缓存计划中出现 CREATE DOMAIN 或 ALTER DOMAIN 时损坏计划缓存条目(Tom Lane)
改进使 WAL 发送进程在 pg_stat_activity 中显示最新的复制命令
变更
使 WAL 发送进程在 pg_stat_activity 中显示最新的复制命令(Tom Lane)
以前,WAL 发送进程会显示其最新的 SQL 命令,如果它此时正在执行复制操作,就会令人困惑。现在将复制协议命令与 SQL 命令同等显示。
改进当 postgresql.conf 中的相关条目被移除时,使 pg_settings.pending_restart 显示为 true
变更
当 postgresql.conf 中的相关条目被移除时,使 pg_settings.pending_restart 显示为 true(Álvaro Herrera)
对于必须重启 postmaster 才能更改的条目,pending_restart 能正确显示条目已被修改的情况,却无法显示条目被完全移除的情况。
关联记录 (4)
- 相同变化PostgreSQL 13.4 · 当 postgresql.conf 中的相关条目被移除时,使 pg_settings.pending_restart 显示为 true
- 相同变化PostgreSQL 12.8 · 当 postgresql.conf 中的相关条目被移除时,使 pg_settings.pending_restart 显示为 true
- 相同变化PostgreSQL 11.13 · 当 postgresql.conf 中的相关条目被移除时,使 pg_settings.pending_restart 显示为 true
- 相同变化PostgreSQL 9.6.23 · 当 postgresql.conf 中相关条目被移除时,让 pg_settings.pending_restart 显示为 true
问题修复修复新备库在边界情况下无法跟随新主库的问题
变更
修复新备库在边界情况下无法跟随新主库的问题(Dilip Kumar,Robert Haas)
在一组少见的条件组合下,备库可能最终尝试跟随错误的 WAL 时间线。
改进当事务中止记录的 WAL 重放导致文件截断时,更新最小恢复点
变更
当事务中止记录的 WAL 重放导致文件截断时,更新最小恢复点(Fujii Masao)
文件截断是不可逆的,因此在早于该记录的位置停止恢复已不再安全。事务提交的对应情况多年前就已修复,但这一情况被遗漏了。
改进在 WAL 接收进程中,避免发生错误后尝试查找系统目录
变更
在 WAL 接收进程中,避免发生错误后尝试查找系统目录(Masahiko Sawada,Bharath Rupireddy)
改进确保备库的启动进程在等待 WAL 到达时及时响应关闭信号
变更
确保备库的启动进程在等待 WAL 到达时及时响应关闭信号(Fujii Masao,Soumyadeep Chakraborty)
改进增加锁定,避免其他进程并发写入时读取到错误的 relmapper 数据
变更
增加锁定,避免其他进程并发写入时读取到错误的 relmapper 数据(Heikki Linnakangas)
改进改进对违反复制协议的情况的检查
变更
改进对违反复制协议的情况的检查(Tom Lane)
逻辑复制工作进程经常使用断言来检查可能由无效或乱序复制命令触发的情况。这似乎并不明智,因此将这些检查改为常规错误检查。
问题修复修复对推测插入进行逻辑解码时的错误情况和内存泄漏
变更
修复对推测插入进行逻辑解码时的错误情况和内存泄漏(Dilip Kumar)
问题修复修复 CREATE TABLE ... AS EXECUTE 在某些错误情况下的计划缓存引用泄漏
变更
修复 CREATE TABLE ... AS EXECUTE 在某些错误情况下的计划缓存引用泄漏(Tom Lane)
问题修复修复释放 BackgroundWorkerSlots 时可能出现的竞争条件
变更
修复释放 BackgroundWorkerSlots 时可能出现的竞争条件(Tom Lane)
这可能不会修复 Intel 硬件上任何可观察到的缺陷,但内存排序规则较弱的机器可能存在问题。
问题修复修复排序代码中潜在的崩溃
变更
修复排序代码中潜在的崩溃(Ronan Dunklau)
某个代码路径可能尝试释放空指针。在核心服务器使用排序的方式中,这种情况似乎无法触发,但扩展或许能够触发。
改进防止 SP-GiST 索引插入中的无限循环
变更
防止 SP-GiST 索引插入中的无限循环(Tom Lane)
如果 INCLUDE 列占用的空间很大,使叶子索引元组无论如何都无法放入一页,text_ops 操作符类就会陷入无限循环,徒劳地尝试让该元组放得下。虽然 v11 之前的版本没有 INCLUDE 列,仍将这一防止循环的修复反向移植到这些版本,因为它似乎能有效防范操作符类中的缺陷。
改进确保 SP-GiST 索引插入可以被查询取消请求终止
变更
确保 SP-GiST 索引插入可以被查询取消请求终止(Tom Lane,Álvaro Herrera)
问题修复修复未初始化变量的缺陷,该缺陷可能使 PL/pgSQL 表现得像 INTO 子句指定了 STRICT,即使实际并未指定
变更
修复未初始化变量的缺陷,该缺陷可能使 PL/pgSQL 表现得像 INTO 子句指定了 STRICT,即使实际并未指定(Tom Lane)
关联记录 (4)
- 相同变化PostgreSQL 13.4 · 修复未初始化变量的缺陷,该缺陷可能使 PL/pgSQL 表现得像 INTO 子句指定了 STRICT,即使实际并未指定
- 相同变化PostgreSQL 12.8 · 修复未初始化变量的缺陷,该缺陷可能使 PL/pgSQL 表现得像 INTO 子句指定了 STRICT,即使实际并未指定
- 相同变化PostgreSQL 11.13 · 修复未初始化变量的缺陷,该缺陷可能使 PL/pgSQL 表现得像 INTO 子句指定了 STRICT,即使实际并未指定
- 相同变化PostgreSQL 9.6.23 · 修复可能导致 PL/pgSQL 把未指定 STRICT 的 INTO 子句当作指定了的未初始化变量 bug
改进不要因 libpq 打印函数中的内存不足而中止进程
变更
不要因 libpq 打印函数中的内存不足而中止进程(Tom Lane)
改进在 ecpg 中,允许将 numeric 值 INT_MIN(通常为 -2147483648)转换为整数
变更
在 ecpg 中,允许将 numeric 值 INT_MIN(通常为 -2147483648)转换为整数(John Naylor)
关联记录 (4)
安全在 psql 和其他客户端程序中,避免处理编码无效的数据时越过字符串末尾
变更
在 psql 和其他客户端程序中,避免处理编码无效的数据时越过字符串末尾(Tom Lane)
字符串末尾附近编码不正确的多字节字符,可能导致各种处理循环越过字符串末尾的 NUL。根据随后内存中的内容,其后果可能从没有可检测的问题到程序崩溃不等。这与 CVE-2006-2313 相似,不过这些具体情况似乎不会造成值得关注的安全后果。
改进避免对不同时区创建的归档文件运行 pg_restore 时出现 “invalid creation date in header” 警告
变更
避免对不同时区创建的归档文件运行 pg_restore 时出现 “invalid creation date in header” 警告(Tom Lane)
关联记录 (4)
- 相同变化PostgreSQL 13.4 · 避免对不同时区创建的归档文件运行 pg_restore 时出现 “invalid creation date in header” 警告
- 相同变化PostgreSQL 12.8 · 避免对不同时区创建的归档文件运行 pg_restore 时出现 “invalid creation date in header” 警告
- 相同变化PostgreSQL 11.13 · 避免对不同时区创建的归档文件运行 pg_restore 时出现 “invalid creation date in header” 警告
- 相同变化PostgreSQL 9.6.23 · 避免在不同时区创建的归档文件上运行 pg_restore 时出现的 “invalid creation date in header” 警告
改进使 pg_upgrade 沿用旧安装实例的 oldestXID 值
变更
使 pg_upgrade 沿用旧安装实例的 oldestXID 值(Bertrand Drouvot)
以前,新安装实例的 oldestXID 会被设为一个很旧的值,通常足以强制立即进行防回卷自动清理。从性能角度看,这并不理想;更糟的是,使用较大 autovacuum_freeze_max_age 值的实例可能在升级后不久就遭遇意外的强制关闭。
改进扩展 pg_upgrade,使其检测应升级的扩展并发出警告
变更
扩展 pg_upgrade,使其检测应升级的扩展并发出警告(Bruce Momjian)
现在会生成一个脚本文件,其中包含将扩展升级到新安装实例中默认版本所需的 ALTER EXTENSION UPDATE 命令。
改进避免 pg_receivewal 在压缩与非压缩 WAL 存储之间切换时出现问题
变更
避免 pg_receivewal 在压缩与非压缩 WAL 存储之间切换时出现问题(Michael Paquier)
改进在 contrib/postgres_fdw 中,避免发生错误后尝试查找系统目录
变更
在 contrib/postgres_fdw 中,避免发生错误后尝试查找系统目录(Tom Lane)
虽然这通常能正常工作,但并不十分安全,因为发生的错误可能已经使目录访问无法正常进行。这一修复的副作用是,关于数据转换错误的消息现在会提及查询中的表和列别名(如果使用了别名),而非底层外部表或列的真实名称。
改进改进隔离测试基础设施
变更
改进隔离测试基础设施(Tom Lane,Michael Paquier)
允许对隔离测试步骤添加注解,说明预期的完成顺序。这使原本存在竞争的测试用例也能获得稳定结果,无需再像以前那样使用长时间延迟来规避竞争条件(而且以前也并未完全成功)。允许使用不带引号的标识符作为隔离测试的会话或步骤名称(以前,所有此类名称都必须加双引号)。检测隔离测试中未使用的步骤并发出警告。改进隔离测试中查询结果的显示。移除 isolationtester 的“试运行”模式。消除 isolationtester 自身的内存泄漏。
性能减少强制破坏缓存测试的开销
变更
减少强制破坏缓存测试的开销(Tom Lane)
问题修复修复 PL/Python 的回归测试,使其在 Python 3.10 下通过
变更
修复 PL/Python 的回归测试,使其在 Python 3.10 下通过(Honza Horak)
改进使 printf("%s", NULL) 打印 (null),而不崩溃
变更
使 printf("%s", NULL) 打印 (null),而不崩溃(Tom Lane)
这应该能提高服务器在边界情况下的稳健性,并使我们的 printf 实现与常见库保持一致。
问题修复修复时间点恢复停止在 ROLLBACK PREPARED 记录处时不正确的日志消息
变更
修复时间点恢复停止在 ROLLBACK PREPARED 记录处时不正确的日志消息(Simon Riggs)
改进使涉及“非负”值的错误消息更清晰
变更
使涉及“非负”值的错误消息更清晰(Bharath Rupireddy)
问题修复修复 configure,使其支持不再提供独立 libldap_r 库的 OpenLDAP 2.5
变更
修复 configure,使其支持不再提供独立 libldap_r 库的 OpenLDAP 2.5(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 相同,但不构建或安装文档。
问题修复修复 TAP 测试的 make 规则(prove_installcheck),使其在 PGXS 用法下正常工作
变更
修复 TAP 测试的 make 规则(prove_installcheck),使其在 PGXS 用法下正常工作(Andrew Dunstan)
关联记录 (4)
- 相同变化PostgreSQL 13.4 · 修复 TAP 测试的 make 规则(prove_installcheck),使其在 PGXS 用法下正常工作
- 相同变化PostgreSQL 12.8 · 修复 TAP 测试的 make 规则(prove_installcheck),使其在 PGXS 用法下正常工作
- 相同变化PostgreSQL 11.13 · 修复 TAP 测试的 make 规则(prove_installcheck),使其在 PGXS 用法下正常工作
- 相同变化PostgreSQL 9.6.23 · 修复 TAP 测试的 make 规则(prove_installcheck)在 PGXS 用法下工作的问题
改进允许 PostgreSQL 版本 10 使用 ICU 69 及更新版本构建
变更
允许 PostgreSQL 版本 10 使用 ICU 69 及更新版本构建(Peter Eisentraut)
改进避免假定 GSSAPI 库返回的字符串以空字符结尾
变更
避免假定 GSSAPI 库返回的字符串以空字符结尾(Tom Lane)
GSSAPI 规范提供字符串指针和长度。在实践中,字符串后的下一个字节似乎通常为零,因此我们以前的代码没有实际失败;但确实收到了 AddressSanitizer 报错的报告。
改进允许在 MSVC 上构建 GSSAPI 支持
变更
允许在 MSVC 上构建 GSSAPI 支持(Michael Paquier)
修复与现代 Kerberos 构建的各种不兼容问题。
改进在 MSVC 构建中,如果指定了 --with-pgport,则将其包含在 pg_config 报告的 configure 选项中
变更
在 MSVC 构建中,如果指定了 --with-pgport,则将其包含在 pg_config 报告的 configure 选项中(Andrew Dunstan)
关联记录 (4)
- 相同变化PostgreSQL 13.4 · 在 MSVC 构建中,如果指定了 --with-pgport,则将其包含在 pg_config 报告的 configure 选项中
- 相同变化PostgreSQL 12.8 · 在 MSVC 构建中,如果指定了 --with-pgport,则将其包含在 pg_config 报告的 configure 选项中
- 相同变化PostgreSQL 11.13 · 在 MSVC 构建中,如果指定了 --with-pgport,则将其包含在 pg_config 报告的 configure 选项中
- 相同变化PostgreSQL 9.6.23 · 在 MSVC 构建中,如果指定过 --with-pgport,把它包含在 pg_config 报告的 configure 选项集合中
没有匹配的变化
尝试其他关键词,或 .
如何生成比较结果?
比较依据起始版本之后至目标版本的 PostgreSQL 发布说明。经核实的回补重复项会谨慎合并,保留每条原始说明;相关提交可能涉及独立变化,仍作为不同记录保留。
发布快照: 2026-09-26 · 安全快照: 2026-09-26
内容来自 PostgreSQL 发布说明。交互方式参考 pgversions.com 与 pgversionreport.