文档版本比较
POSTGRESQL · VERSION COMPARE
PostgreSQL 12.11 发布变化
此版本的完整功能、修复与兼容性说明,以及其他版本的关联记录。
包括起始版本之后至目标版本的变化。大版本号表示该分支的首个版本。
从数据库输出识别起始版本
完整发布变化
12.11
2022-05-12
12.11stable支持截止 2024-11-21
安全变化
| CVE / 问题 | 严重程度 | 修复版本 | 所选版本状态 |
|---|---|---|---|
| CVE-2022-1552 将更多操作限制在“安全受限操作”沙箱内 | 12.11 | 已记录修复 |
PostgreSQL 12.11
迁移与兼容性
对于运行 12.X 的用户,不需要执行导出/恢复。
但是,如果是从早于 12.10 的版本升级,请参见第 E.13 节。
安全将更多操作限制在“安全受限操作”沙箱内
变更
将更多操作限制在“安全受限操作”沙箱内(Sergey Shinderuk,Noah Misch)§ §
自动清理、CLUSTER、CREATE INDEX、REINDEX、REFRESH MATERIALIZED VIEW 和 pg_amcheck 激活“安全受限操作”保护机制的时间过晚,甚至在某些代码路径中根本没有激活。在数据库中拥有创建非临时对象权限的用户可以定义一个对象,当自动清理下次处理该对象时,或者当某个超级用户对其运行上述受影响的命令时,该对象会以超级用户权限执行任意 SQL 代码。
PostgreSQL 项目感谢 Alexander Lakhin 报告此问题。(CVE-2022-1552)
改进停止将查询提供的列别名用于引用普通表的整行变量的列
变更
停止将查询提供的列别名用于引用普通表的整行变量的列(Tom Lane)§
整行变量(例如在 SELECT 列表顶层以外的上下文中的 tbl.*)产生的元组中的列名,现在始终为关联的命名复合类型的列名(如果有的话)。之前我们曾尝试使其跟踪已应用于该变量所引用的 FROM 条目的任何列别名。但这在语义上是有问题的,因为这样变量的输出实际上根本不是它声称的复合类型。之前处理这种不一致性的尝试产生了糟糕的结果,甚至包括在磁盘上存储不可读的数据,因此放弃了整个想法。
在需要重新标记这些列的情况下,一种变通方法是引入一个额外的子 SELECT 层级,使整行变量引用子 SELECT 的输出而非普通表。这样变量一开始就是 record 类型,就不存在这个问题了。
问题修复修复 table_to_xmlschema() 及相关函数中 timestamptz 和 timetz 类型的不正确输出
变更
修复 table_to_xmlschema() 及相关函数中 timestamptz 和 timetz 类型的不正确输出(Renan Soares Lopes)§
这些类型的 xmlschema 输出包含了格式错误的正则表达式。
关联记录 (4)
- 相同变化PostgreSQL 14.3 · 修复 table_to_xmlschema() 及相关函数中 timestamptz 和 timetz 类型的不正确输出
- 相同变化PostgreSQL 13.7 · 修复 table_to_xmlschema() 及相关函数中 timestamptz 和 timetz 类型的不正确输出
- 相同变化PostgreSQL 11.16 · 修复 table_to_xmlschema() 及相关函数中 timestamptz 和 timetz 类型的不正确输出
- 相同变化PostgreSQL 10.21 · 修复 table_to_xmlschema() 及相关函数中 timestamptz 和 timetz 类型的不正确输出
改进避免解析器在处理零列的 VALUES 子句时发生核心转储
变更
避免解析器在处理零列的 VALUES 子句时发生核心转储(Tom Lane)§
问题修复修复引用外层查询级别的 GROUPING() 构造的规划器错误
变更
修复引用外层查询级别的 GROUPING() 构造的规划器错误(Richard Guo,Tom Lane)§
问题修复修复具有可返回列和不可返回列的索引上的仅索引扫描计划生成
变更
修复具有可返回列和不可返回列的索引上的仅索引扫描计划生成(Tom Lane)§
之前的代码会尝试读取不可返回列以及可返回列。这基本上是无害的,因为它实际上并没有对错误的值做任何处理,但它违反了最近添加的拒绝此类计划的错误检查。
改进避免在 EvalPlanQual 期间尝试锁定过时元组时访问不再被固定的共享缓冲区
变更
避免在 EvalPlanQual 期间尝试锁定过时元组时访问不再被固定的共享缓冲区(Tom Lane)§
代码会在释放其 pin 之后再访问该缓冲区几次。理论上,另一个进程可能在 pin 被释放后立即回收该缓冲区(或者更可能是尝试对其空闲空间进行碎片整理),这很可能导致无法找到元组的较新版本。
问题修复修复正在执行重新排序的 IndexScan 节点中的查询生命周期内存泄漏
变更
修复正在执行重新排序的 IndexScan 节点中的查询生命周期内存泄漏(Aliaksandr Kalenik)§
问题修复修复 ALTER FUNCTION 使其支持在同一命令中同时更改函数的并行属性及其 SET 变量列表
变更
修复 ALTER FUNCTION 使其支持在同一命令中同时更改函数的并行属性及其 SET 变量列表(Tom Lane)§
如果同一命令还更新了函数的 SET 子句,则并行属性的更改会丢失。
问题修复修复尝试修改表的系统列时产生的虚假错误
变更
修复尝试修改表的系统列时产生的虚假错误(Tom Lane)§
系统应该告诉你不能这样做,但有时它会报告 “no owned sequence found”。
问题修复修复使用前导键为表达式的索引进行 CLUSTER 时表行的错误排序
变更
修复使用前导键为表达式的索引进行 CLUSTER 时表行的错误排序(Peter Geoghegan,Thomas Munro)§
表会使用正确的数据重建,但其顺序与索引顺序关系不大。
问题修复修复删除分区索引时可能出现的死锁风险
变更
修复删除分区索引时可能出现的死锁风险(Jimmy Yih,Gaurab Dey,Tom Lane)§
确保以标准顺序(先父后子,先表后索引)获取所需的表锁和索引锁。之前 DROP INDEX 的代码处理方式不同,因此可能与按标准顺序获取这些锁的并发查询发生死锁。
问题修复修复 DROP TABLESPACE 与检查点之间的竞态条件
变更
修复 DROP TABLESPACE 与检查点之间的竞态条件(Nathan Bossart)§
由 DROP TABLESPACE 强制执行的检查点有时无法从表空间目录中删除所有失效文件,导致虚假的 “tablespace is not empty” 错误。
问题修复修复与检查点重叠的 TRUNCATE 命令之后崩溃恢复中可能出现的问题
问题修复修复临时对象清理期间不安全的 toast 数据访问
变更
修复临时对象清理期间不安全的 toast 数据访问(Andres Freund)§
服务器进程退出期间的临时对象删除可能会失败并显示 “FATAL: cannot fetch toast data without an active snapshot”。这通常是无害的,因为下次使用该临时模式时会成功清理。
改进改进 RegisterSyncRequest 中的等待逻辑
变更
改进 RegisterSyncRequest 中的等待逻辑(Thomas Munro)§
如果检查点进程同步请求队列空间不足(这在实际系统中很少见,但在使用非常小的缓冲池进行测试时很常见),我们会等待其排空。在等待期间,我们应该将其报告为等待事件以便用户了解情况,并且还应该监视 postmaster 是否已终止,否则如果检查点进程已经退出,循环可能永远不会终止。
问题修复修复当存在缺失的 WAL 续接记录时,备库提升期间出现的 “PANIC: xlog flush request is not satisfied” 失败
变更
修复当存在缺失的 WAL 续接记录时,备库提升期间出现的 “PANIC: xlog flush request is not satisfied” 失败(Sami Imseih)§
关联记录 (4)
- 相同变化PostgreSQL 14.3 · 修复当存在缺失的 WAL 续接记录时,备库提升期间出现的 “PANIC: xlog flush request is not satisfied” 失败
- 相同变化PostgreSQL 13.7 · 修复当存在缺失的 WAL 续接记录时,备库提升期间出现的 “PANIC: xlog flush request is not satisfied” 失败
- 相同变化PostgreSQL 11.16 · 修复当存在缺失的 WAL 续接记录时,备库提升期间出现的 “PANIC: xlog flush request is not satisfied” 失败
- 相同变化PostgreSQL 10.21 · 修复当存在缺失的 WAL 续接记录时,备库提升期间出现的 “PANIC: xlog flush request is not satisfied” 失败
问题修复修复热备冲突处理中可能出现的自死锁问题
变更
改进确保逻辑复制应用工作进程即使在达到 max_sync_workers_per_subscription 限制时也能重启
变更
确保逻辑复制应用工作进程即使在达到 max_sync_workers_per_subscription 限制时也能重启(Amit Kapila)§
限制检查的错误编码导致重启的工作进程立即退出,使得工作进程数量少于应有的数量。
关联记录 (4)
- 相同变化PostgreSQL 14.3 · 确保逻辑复制应用工作进程即使在达到 max_sync_workers_per_subscription 限制时也能重启
- 相同变化PostgreSQL 13.7 · 确保逻辑复制应用工作进程即使在达到 max_sync_workers_per_subscription 限制时也能重启
- 相同变化PostgreSQL 11.16 · 确保逻辑复制应用工作进程即使在达到 max_sync_workers_per_subscription 限制时也能重启
- 相同变化PostgreSQL 10.21 · 确保逻辑复制应用工作进程即使在达到 max_sync_workers_per_subscription 限制时也能重启
改进在更新的 WAL 日志中包含未更改的副本标识键列(如果它们以行外方式存储)
变更
在更新的 WAL 日志中包含未更改的副本标识键列(如果它们以行外方式存储)(Dilip Kumar,Amit Kapila)§
否则订阅者无法看到这些值,并且将无法复制该更新。
改进改进逻辑复制订阅者针对不支持的关系种类所给出的错误消息
变更
改进逻辑复制订阅者针对不支持的关系种类所给出的错误消息(Tom Lane)§
v13 及更新版本的服务器支持发布分区表。更早的服务器版本无法订阅这类表,却给出极具误导性的错误消息:“table XYZ not found on publisher”。现在改为给出更切合问题的消息。
改进禁止在 PL/Perl 函数编译期间执行 SPI 函数
变更
禁止在 PL/Perl 函数编译期间执行 SPI 函数(Tom Lane)§
可以让 Perl 在 PL/Perl 函数编译期间执行用户定义的代码。但是,这类代码不应该尝试通过 SPI 调用 SQL 操作。那样做会导致崩溃,即使不崩溃也是一个安全隐患,因为我们确实不希望在函数验证期间执行代码。增加了一个检查以给出更友好的错误消息。
改进使 libpq 接受 root 拥有的 SSL 私钥文件
问题修复修复 libpq 的 PQisBusy() 函数在连接失败后的行为
变更
修复 libpq 的 PQisBusy() 函数在连接失败后的行为(Tom Lane)§
如果检测到写入失败,PQisBusy() 总是返回 true,这是不正确的:我们希望输入处理继续正常进行,直到读取完服务器可用的所有内容。此错误的实际影响是,使用 libpq 异步查询 API 的应用程序通常只有在 PQconsumeInput() 返回硬失败时才能检测到连接丢失。通过此修复,连接丢失通常将通过错误 PGresult 对象报告,这对大多数应用程序来说是更清晰的行为。
改进使 pg_ctl 在等待停止/重启/提升操作时重新检查 postmaster 是否仍然存活
变更
使 pg_ctl 在等待停止/重启/提升操作时重新检查 postmaster 是否仍然存活(Tom Lane)§
pg_ctl 会在发送停止或提升信号时作为副作用验证 postmaster 是否存活,但之后它只是简单地等待磁盘上的状态变化。如果 postmaster 非正常终止且未删除其 PID 文件或更新控制文件, pg_ctl 将一直等到超时。现在改为每隔一段时间重新检查 postmaster 进程是否仍然存在。
问题修复修复 pg_waldump 中的错误处理
改进确保 contrib/pageinspect 函数能够处理全零页面
变更
确保 contrib/pageinspect 函数能够处理全零页面(Michael Paquier)§
这是一个合理的边界情况,但该模块大多未做准备。安排返回 null 或不返回行,视情况而定;这比抛出错误更有用。
问题修复在 contrib/pageinspect 中,增加对不正确页面“特殊空间”内容的防御,收紧对正确页面大小的检查,并增加一些缺失的索引类型正确性检查
变更
在 contrib/pageinspect 中,增加对不正确页面“特殊空间”内容的防御,收紧对正确页面大小的检查,并增加一些缺失的索引类型正确性检查(Michael Paquier,Justin Pryzby,Julien Rouhaud)§ § §
这些变更减少了该模块在处理错误数据时崩溃的可能性。
关联记录 (4)
- 相同变化PostgreSQL 14.3 · 在 contrib/pageinspect 中,增加对不正确页面“特殊空间”内容的防御,收紧对正确页面大小的检查,并增加一些缺失的索引类型正确性检查
- 相同变化PostgreSQL 13.7 · 在 contrib/pageinspect 中,增加对不正确页面“特殊空间”内容的防御,收紧对正确页面大小的检查,并增加一些缺失的索引类型正确性检查
- 相同变化PostgreSQL 11.16 · 在 contrib/pageinspect 中,增加对不正确页面“特殊空间”内容的防御,收紧对正确页面大小的检查,并增加一些缺失的索引类型正确性检查
- 相同变化PostgreSQL 10.21 · 在 contrib/pageinspect 中,增加对不正确页面“特殊空间”内容的防御,收紧对正确页面大小的检查,并增加一些缺失的索引类型正确性检查
改进在 contrib/postgres_fdw 中,在请求远程排序查询之前验证 ORDER BY 子句是否可以安全传送,并在必要时包含 USING 子句
变更
在 contrib/postgres_fdw 中,在请求远程排序查询之前验证 ORDER BY 子句是否可以安全传送,并在必要时包含 USING 子句(Ronan Dunklau)§
此修复防止了远程服务器可能按与我们意图不同的顺序排序的情况。虽然有时这只是表面问题,但如果远程数据被用作本地执行的合并连接的输入,则可能产生完全错误的结果。
关联记录 (4)
- 相同变化PostgreSQL 14.3 · 在 contrib/postgres_fdw 中,在请求远程排序查询之前验证 ORDER BY 子句是否可以安全传送,并在必要时包含 USING 子句
- 相同变化PostgreSQL 13.7 · 在 contrib/postgres_fdw 中,在请求远程排序查询之前验证 ORDER BY 子句是否可以安全传送,并在必要时包含 USING 子句
- 相同变化PostgreSQL 11.16 · 在 contrib/postgres_fdw 中,在请求远程排序查询之前验证 ORDER BY 子句是否可以安全传送,并在必要时包含 USING 子句
- 相同变化PostgreSQL 10.21 · 在 contrib/postgres_fdw 中,在请求远程排序查询之前验证 ORDER BY 子句是否可以安全传送,并在必要时包含 USING 子句
改进更新 JIT 代码以支持 LLVM 14
变更
更新 JIT 代码以支持 LLVM 14(Thomas Munro)§
改进清理在 clang 的 -fsanitize=undefined 检查下出现的各种失败
问题修复修复 PL/Perl 使其能在不支持嵌套在表达式中的语句的 C 编译器上构建
变更
修复 PL/Perl 使其能在不支持嵌套在表达式中的语句的 C 编译器上构建(Tom Lane)§
问题修复修复在 Windows 上不使用 MSVC 构建时 pg_dumpall 可能的构建失败
变更
修复在 Windows 上不使用 MSVC 构建时 pg_dumpall 可能的构建失败(Andres Freund)§
改进在 Windows 构建中,使用 gendef 代替 pexports 来构建 DEF 文件
变更
在 Windows 构建中,使用 gendef 代替 pexports 来构建 DEF 文件(Andrew Dunstan)§
这使构建过程适应了最近的 MSys 工具链。
改进防止在 MinGW 下构建的程序中对 shell 通配符模式进行额外展开
变更
防止在 MinGW 下构建的程序中对 shell 通配符模式进行额外展开(Andrew Dunstan)§
出于某种原因,MinGW 提供的 C 库默认会展开程序命令行参数中的 shell 通配符字符。这令人困惑,尤其是因为在 MSVC 下不会发生这种情况,因此将其关闭。
改进将时区数据文件更新为 tzdata 2022a 版本,包含巴勒斯坦的夏令时规则变更,以及智利和乌克兰的历史修正。
变更
将时区数据文件更新为 tzdata 2022a 版本,包含巴勒斯坦的夏令时规则变更,以及智利和乌克兰的历史修正。(Tom Lane)§
关联记录 (4)
- 相同变化PostgreSQL 14.3 · 将时区数据文件更新为 tzdata 2022a 版本,包含巴勒斯坦的夏令时规则变更,以及智利和乌克兰的历史修正。
- 相同变化PostgreSQL 13.7 · 将时区数据文件更新为 tzdata 2022a 版本,包含巴勒斯坦的夏令时规则变更,以及智利和乌克兰的历史修正。
- 相同变化PostgreSQL 11.16 · 将时区数据文件更新到 tzdata 2022a 版,以反映巴勒斯坦的夏令时法规变更,并修正智利和乌克兰的历史数据。
- 相同变化PostgreSQL 10.21 · 将时区数据文件更新到 tzdata 2022a 版,以反映巴勒斯坦的夏令时法规变更,并修正智利和乌克兰的历史数据。
没有匹配的变化
尝试其他关键词,或 .
如何生成比较结果?
比较依据起始版本之后至目标版本的 PostgreSQL 发布说明。经核实的回补重复项会谨慎合并,保留每条原始说明;相关提交可能涉及独立变化,仍作为不同记录保留。
发布快照: 2026-09-26 · 安全快照: 2026-09-26
内容来自 PostgreSQL 发布说明。交互方式参考 pgversions.com 与 pgversionreport.