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

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

文档版本比较

POSTGRESQL · VERSION COMPARE

PostgreSQL 12.8 发布变化

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

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

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

完整发布变化

12.8

2021-08-12

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

12.8stable支持截止 2024-11-21

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

修复重复应用投影步骤时产生错误计划的问题

12.8已记录修复
CVE-2021-3449

更彻底地禁止 SSL 重新协商

已记录修复
CVE-2006-2313

在 psql 和其他客户端程序中,避免处理编码无效的数据时越过字符串末尾

已记录修复

PostgreSQL 12.8

迁移与兼容性

对于运行 12.X 的用户,不需要执行导出/恢复。

但是,如果是从早于 12.6 的版本升级,请参见第 E.17 节。

安全修复重复应用投影步骤时产生错误计划的问题

变更

修复重复应用投影步骤时产生错误计划的问题(Tom Lane)§

当两个 ProjectionPath 相互叠加时,规划器可能生成错误的计划。已知唯一能触发这种情况的方式涉及并行排序操作,但也可能存在其他情形。其结果可能是崩溃或错误的查询结果,也可能泄露服务器内存内容。(CVE-2021-3677)

关联记录 (2)
安全更彻底地禁止 SSL 重新协商

变更

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

虽然 SSL 重新协商已被禁用一段时间,但服务器仍会配合客户端发起的重新协商请求。恶意构造的重新协商请求可能导致服务器崩溃(参见 OpenSSL 问题 CVE-2021-3449)。在允许完全禁用此功能的 OpenSSL 版本(即 1.1.0h 及更新版本)上,将其彻底禁用。

关联记录 (4)
改进在过程内部执行 COMMIT 或 ROLLBACK 后恢复 Portal 级快照

变更

在过程内部执行 COMMIT 或 ROLLBACK 后恢复 Portal 级快照(Tom Lane)§ § § § §

此项修改修复了紧接着 COMMIT/ROLLBACK 尝试获取经过 TOAST 处理的值时,出现 “no known snapshots” 或 “missing chunk number 0 for toast value” 等错误的情况。

某些扩展可能尝试在任何 Portal 之外执行 SQL 代码。它们有责任在执行前确保存在外层快照。以前,不提供快照可能行得通,也可能不行;现在则会始终以 “cannot execute SQL without an outer snapshot or portal” 错误失败。

关联记录 (2)
改进避免持久化读取非稳定查询的游标输出时出现异常行为

变更

避免持久化读取非稳定查询的游标输出时出现异常行为(Tom Lane)§ §

以前,我们总会退回起点并重新读取整个查询结果,可能得到与先前执行不同的结果,从而给后续处理造成很大混乱。对于 NO SCROLL 游标,可以只存储查询输出中尚未读取的部分来修复此问题;由于 NO SCROLL 游标不能后退,这样就足够了。带 SCROLL 选项的游标仍存在风险,但文档早已说明,将此选项用于非稳定查询是不安全的。现在进一步加强这些文档警告。

另外,强制 PL/pgSQL 遍历查询结果的 FOR 循环所使用的隐式游标采用 NO SCROLL 模式,以避免在过程内部提交期间持久化这类游标时出现此类问题。

关联记录 (2)
改进拒绝 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)§

以前,这些情况会导致崩溃。

关联记录 (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)
问题修复修复 ALTER SUBSCRIPTION,使其拒绝空的槽名称

变更

修复 ALTER SUBSCRIPTION,使其拒绝空的槽名称(Japin Li)§

关联记录 (3)
改进将分区表的触发器克隆到新分区时,确保复制其启用状态

变更

将分区表的触发器克隆到新分区时,确保复制其启用状态(Álvaro Herrera)§

关联记录 (2)
改进避免为 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)
改进禁止在 GENERATED 表达式中使用整行变量

变更

禁止在 GENERATED 表达式中使用整行变量(Tom Lane)§

使用整行变量显然违反了生成列不能依赖自身的规则,因此这些情况没有明确定义的行为。实际行为经常包括崩溃。

关联记录 (1)
问题修复修复 GENERATED 表达式中 tableoid 的使用

变更

修复 GENERATED 表达式中 tableoid 的使用(Tom Lane)§

某些代码路径在计算 GENERATED 表达式时,未能为这个系统列提供有效值。

关联记录 (1)
改进向外部表添加列时,不存储“快速默认值”

变更

向外部表添加列时,不存储“快速默认值”(Andrew Dunstan)§

由于此类表没有本地堆存储,快速默认值没有用途,却会干扰后续操作。除了阻止 ALTER TABLE 命令创建此类目录条目之外,还调整后续代码,使其能够应对错误存在的此类条目。

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

变更

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

这可以避免处理实际上并非不可变的索引谓词时发生失败。虽然这种情况不被视为受支持的用法,但这里最初采用非事务更新的原因早已不复存在,因此不妨进行修改。

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

变更

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

关联记录 (4)
改进使 WAL 发送进程在 pg_stat_activity 中显示最新的复制命令

变更

使 WAL 发送进程在 pg_stat_activity 中显示最新的复制命令(Tom Lane)§

以前,WAL 发送进程会显示其最新的 SQL 命令,如果它此时正在执行复制操作,就会令人困惑。现在将复制协议命令与 SQL 命令同等显示。

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

变更

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

对于必须重启 postmaster 才能更改的条目,pending_restart 能正确显示条目已被修改的情况,却无法显示条目被完全移除的情况。

关联记录 (4)
问题修复修复涉及外部表的普通继承子表的查询所产生的错误计划

变更

修复涉及外部表的普通继承子表的查询所产生的错误计划(Amit Langote)§

在这些情况下,SELECT FOR UPDATE 及相关命令会因断言失败或 “could not find junk column” 错误而失败。

关联记录 (1)
问题修复修复新备库在边界情况下无法跟随新主库的问题

变更

修复新备库在边界情况下无法跟随新主库的问题(Dilip Kumar,Robert Haas)§ § § § § §

在一组少见的条件组合下,备库可能最终尝试跟随错误的 WAL 时间线。

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

变更

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

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

关联记录 (4)
改进在 WAL 接收进程中,避免发生错误后尝试查找系统目录

变更

在 WAL 接收进程中,避免发生错误后尝试查找系统目录(Masahiko Sawada,Bharath Rupireddy)§

关联记录 (3)
改进确保备库的启动进程在等待 WAL 到达时及时响应关闭信号

变更

确保备库的启动进程在等待 WAL 到达时及时响应关闭信号(Fujii Masao,Soumyadeep Chakraborty)§

关联记录 (4)
改进在未能成为事务提交组成员后正确清除共享状态

变更

在未能成为事务提交组成员后正确清除共享状态(Amit Kapila)§

在特定时序下,当后续某个会话复用同一个 PGPROC 对象时,这可能导致断言失败。

关联记录 (2)
改进增加锁定,避免其他进程并发写入时读取到错误的 relmapper 数据

变更

增加锁定,避免其他进程并发写入时读取到错误的 relmapper 数据(Heikki Linnakangas)§ §

关联记录 (4)
改进改进并行构建 B-树索引时排序阶段的进度报告

变更

改进并行构建 B-树索引时排序阶段的进度报告(Matthias van de Meent)§

关联记录 (1)
改进改进对违反复制协议的情况的检查

变更

改进对违反复制协议的情况的检查(Tom Lane)§

逻辑复制工作进程经常使用断言来检查可能由无效或乱序复制命令触发的情况。这似乎并不明智,因此将这些检查改为常规错误检查。

关联记录 (3)
问题修复修复多个逻辑复制工作进程尝试截断同一个表时的死锁

变更

修复多个逻辑复制工作进程尝试截断同一个表时的死锁(Peter Smith,Haiying Tang)§

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

变更

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

关联记录 (4)
改进避免出错后留下无效的记录类型 hash 表条目

变更

避免出错后留下无效的记录类型 hash 表条目(Sait Talha Nisanci)§

这可能导致后续崩溃或内存泄漏。

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

变更

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

关联记录 (4)
问题修复修复在并行工作进程之间共享元组描述符的代码中的竞争条件

变更

修复在并行工作进程之间共享元组描述符的代码中的竞争条件(Thomas Munro)§

在特定时序下,可能发生崩溃。

关联记录 (2)
问题修复修复释放 BackgroundWorkerSlots 时可能出现的竞争条件

变更

修复释放 BackgroundWorkerSlots 时可能出现的竞争条件(Tom Lane)§

这可能不会修复 Intel 硬件上任何可观察到的缺陷,但内存排序规则较弱的机器可能存在问题。

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

变更

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

某个代码路径可能尝试释放空指针。在核心服务器使用排序的方式中,这种情况似乎无法触发,但扩展或许能够触发。

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

变更

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

如果 INCLUDE 列占用的空间很大,使叶子索引元组无论如何都无法放入一页,text_ops 操作符类就会陷入无限循环,徒劳地尝试让该元组放得下。虽然 v11 之前的版本没有 INCLUDE 列,仍将这一防止循环的修复反向移植到这些版本,因为它似乎能有效防范操作符类中的缺陷。

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

变更

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

关联记录 (4)
问题修复修复未初始化变量的缺陷,该缺陷可能使 PL/pgSQL 表现得像 INTO 子句指定了 STRICT,即使实际并未指定

变更

修复未初始化变量的缺陷,该缺陷可能使 PL/pgSQL 表现得像 INTO 子句指定了 STRICT,即使实际并未指定(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_dump,使其正确处理分区表上启用状态与父触发器不同的触发器

变更

修复 pg_dump,使其正确处理分区表上启用状态与父触发器不同的触发器(Justin Pryzby,Álvaro Herrera)§

关联记录 (2)
改进避免对不同时区创建的归档文件运行 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)
改进避免 pg_receivewal 在压缩与非压缩 WAL 存储之间切换时出现问题

变更

避免 pg_receivewal 在压缩与非压缩 WAL 存储之间切换时出现问题(Michael Paquier)§ §

关联记录 (3)
问题修复修复 contrib/postgres_fdw,使其能够有效地处理生成列

变更

修复 contrib/postgres_fdw,使其能够有效地处理生成列(Etsuro Fujita)§

只要外部表中的生成列对应远程表中的生成列,postgres_fdw 现在就能合理地处理生成列。IMPORT FOREIGN SCHEMA 现在默认会以这种方式导入生成列。

关联记录 (1)
改进在 contrib/postgres_fdw 中,避免发生错误后尝试查找系统目录

变更

在 contrib/postgres_fdw 中,避免发生错误后尝试查找系统目录(Tom Lane)§

虽然这通常能正常工作,但并不十分安全,因为发生的错误可能已经使目录访问无法正常进行。这一修复的副作用是,关于数据转换错误的消息现在会提及查询中的表和列别名(如果使用了别名),而非底层外部表或列的真实名称。

关联记录 (4)
改进改进隔离测试基础设施

变更

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

允许对隔离测试步骤添加注解,说明预期的完成顺序。这使原本存在竞争的测试用例也能获得稳定结果,无需再像以前那样使用长时间延迟来规避竞争条件(而且以前也并未完全成功)。允许使用不带引号的标识符作为隔离测试的会话或步骤名称(以前,所有此类名称都必须加双引号)。检测隔离测试中未使用的步骤并发出警告。改进隔离测试中查询结果的显示。移除 isolationtester 的“试运行”模式。消除 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)
改进改进 ALTER TABLE 对关系种类错误的消息

变更

改进 ALTER TABLE 对关系种类错误的消息(Kyotaro Horiguchi)§

关联记录 (2)
改进使涉及“非负”值的错误消息更清晰

变更

使涉及“非负”值的错误消息更清晰(Bharath Rupireddy)§

关联记录 (4)
问题修复修复 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 相同,但不构建或安装文档。

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

变更

修复 TAP 测试的 make 规则(prove_installcheck),使其在 PGXS 用法下正常工作(Andrew Dunstan)§

关联记录 (4)
改进调整 JIT 代码,为即将到来的 LLVM API 变更做好准备

变更

调整 JIT 代码,为即将到来的 LLVM API 变更做好准备(Thomas Munro,Andres Freund)§

LLVM 13 引入了一项不兼容的 API 变更,会使我们以前的 JIT 编译器崩溃。

关联记录 (2)
改进避免假定 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.