pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
文档版本对比
POSTGRESQL · VERSION COMPARE
本次发布的完整功能、修复与兼容性说明,以及它们在其他版本中的关联记录。
从起始版本之后,看到目标版本为止。大版本名称代表该系列首个正式版本。
收录 PostgreSQL 9.0 起的 17 个大版本、352 份发布说明;数据更新于 2026-09-26。
本次发布的全部变更
2022-08-11
12.12 历史版本维护截止 2024-11-21
| CVE / 问题 | 严重程度 | 修复版本 |
|---|---|---|
| CVE-2022-1552 修复 CREATE INDEX 中的权限检查 | 8.8 | 12.11 |
| CVE-2022-2625 不允许扩展脚本替换不属于该扩展的已有对象 | 7.1 | 12.12 |
对于运行 12.X 的用户,不需要执行导出/恢复。
但是,如果是从早于 12.10 的版本升级,请参见第 E.13 节。
变更
不允许扩展脚本替换不属于该扩展的已有对象(Tom Lane)§
此更改防止扩展脚本在存在不属于该扩展的现有对象时执行 CREATE OR REPLACE。在相同情况下,也防止执行 CREATE IF NOT EXISTS。这防止了一种木马攻击形式,即恶意数据库用户可以成为扩展对象的所有者,然后修改它以危害其他用户对该对象的未来使用。作为附带的好处,它还降低了意外替换非预期对象的风险。
PostgreSQL 项目感谢 Sven Klemm 报告此问题。(CVE-2022-2625)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复在备库上重放 CREATE DATABASE WAL 记录的问题(Kyotaro Horiguchi,Asim R Praveen,Paul Guo)§ § § §
备库在重放数据库创建 WAL 记录时可能遇到缺失的表空间目录。在此补丁之前,备库在这种情况下会恢复失败;然而,此类目录可能是合法缺失的。创建表空间(作为普通目录),然后在重放达到一致状态后检查它是否已被删除。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
支持“原位”表空间(Thomas Munro,Michael Paquier,Álvaro Herrera)§
通常,PostgreSQL 表空间是指向其他文件系统中某个目录的符号链接。此更改允许表空间直接就是一个普通目录。虽然这对将表分布到不同文件系统上没有帮助,但对测试来说是一种方便的设置。此外,为支持 CREATE DATABASE 的重放修复,这一能力是必需的;该修复会将缺失的表空间临时创建为“原位”表空间。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 CREATE INDEX 中的权限检查(Nathan Bossart,Noah Misch)§
CVE-2022-1552 的修复导致 CREATE INDEX 在查找操作符类和其他对象时应用表所有者的权限,而之前使用的是调用用户的权限。这破坏了导出/恢复场景,因为 pg_dump 在重新授予权限之前发出 CREATE INDEX。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
在扩展查询协议中,在 CREATE DATABASE 和其他不能在事务块中运行的命令之后强制立即提交(Tom Lane)§
如果客户端在此类命令之后没有立即发送 Sync 消息,而是发送了另一个命令,那么该命令中的任何失败都将导致回滚前面的命令,通常会在磁盘上留下不一致的状态(如缺失或多余的数据库目录)。用于防止这种情况的机制在简单查询消息中的多个命令中有效,但在一系列扩展协议消息中无效。为了防止不一致而不破坏当前可行的使用场景,在此类命令之后强制执行隐式提交。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复检查事务可见性时的竞态条件(Simon Riggs)§
TransactionIdIsInProgress 可能在目标事务被认为可见之前就报告 false,导致各种异常行为。竞态条件窗口通常非常窄,但使用同步复制会使其大幅扩大,因为等待同步副本的过程发生在该窗口中。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复当“整行变量”引用返回复合类型域的函数结果时的查询问题(Tom Lane)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复在提升引用了 GROUPING 函数的子 SELECT 时出现的 “variable not found in subplan target list” 规划器错误(Richard Guo)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 ALTER TABLE ... ENABLE/DISABLE TRIGGER 对分区表上的触发器正确处理递归(Álvaro Herrera,Amit Langote)§ §
在某些情况下,由于命令会尝试调整没有该触发器的子分区上的触发器,会出现 “trigger does not exist” 错误。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
改进 jsonpath 类型的语法错误消息(Andrew Dunstan)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
防止 pg_stat_get_subscription() 可能返回包含垃圾值的额外行(Kuntal Ghosh)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
确保 pg_stop_backup() 正确清理会话状态(Fujii Masao)§
此遗漏可能导致会话后续出现断言失败或崩溃。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 FOR [KEY] UPDATE/SHARE 子句中的连接别名匹配(Dean Rasheed)§
在某些边界情况下,可能报告误导性的错误。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
拒绝 FROM 中列数过多的 ROW() 表达式和函数(Tom Lane)§ §
超过约 1600 列的情况不受支持,且在执行时始终会失败。然而,一些较早的代码在查询超过 32K 列时可能被驱动到断言失败或崩溃。增加一个解析时检查以防止此问题。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
在反编译视图或规则时,如果 SELECT 输出列的 AS "?column?" 别名子句可能在其他地方被引用,则显示它(Tom Lane)§
之前,这个自动生成的别名总是被隐藏的;但在某些边界情况下,这样做会导致视图或规则定义无法恢复。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复使用 FROM 中返回复合类型的函数的视图的导出问题,当视图创建后复合类型的列已被删除时(Tom Lane)§
此疏忽可能导致导出/恢复或 pg_upgrade 失败,因为导出的视图会有过多的函数列别名。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
向事件触发器报告隐式创建的操作符族(Masahiko Sawada)§
如果 CREATE OPERATOR CLASS 导致隐式创建了一个操作符族,该对象不会被报告给应当捕获此类事件的事件触发器。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复在备库提升期间有重启点正在运行时的控制文件更新(Kyotaro Horiguchi)§
之前,当重启点完成时,它可能会错误地更新控制文件中的最后检查点字段,如果服务器在下一次正常检查点完成之前崩溃,可能导致 PANIC 和重启失败。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
防止在逻辑复制大事务期间触发备库的 wal_receiver_timeout(Wang Wei,Amit Kapila)§
如果主库上的一个大事务没有向备库发送数据(可能是因为它修改的表都没有被发布),备库可能会超时。通过确保在这种情况下定期发送保活消息来修复此问题。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
不允许在逻辑复制 walsender 中执行嵌套备份操作(Fujii Masao)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复逻辑复制订阅者中的内存泄漏(Hou Zhijie)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
防止在读取无效时区缩写文件时发生打开文件泄漏(Kyotaro Horiguchi)§
这种情况可能导致无害的警告消息。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
允许自定义服务器参数具有为 NULL 的简短描述(Steve Chavez)§
之前,虽然扩展可以选择创建这样的设置,但某些代码路径在处理它们时会崩溃。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复共享 hash 表管理中的错误断言检查(Thomas Munro)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
安排在 SPI_commit() 中的提交时错误后进行清理,而不是期望调用者来做(Peter Eisentraut,Tom Lane)§ §
正确的清理很复杂,需要使用底层设施,因此已知的调用者没有一个做对了也不足为奇。这导致当 PL 过程执行 COMMIT 但发生失败(如延迟约束检查)时出现异常行为。为了改善情况,将 SPI_commit() 重新定义为启动一个新事务,使其等价于 SPI_commit_and_chain(),只是获得默认事务特性而不是保留先前事务的特性。为了使此更改在 API 层面具有一定透明性,将 SPI_start_transaction() 重新定义为空操作。所有已知的 SPI_commit() 调用者都会立即调用 SPI_start_transaction(),因此它们不会注意到任何变化。类似的说明适用于 SPI_rollback()。
另外修复了 PL/Python,它完全遗漏了对此类错误的任何处理,导致跳出 Python 解释器。据报告这会导致 Python 3.11 崩溃。较旧的 Python 版本会泄漏一些内存,但似乎在其他方面没有问题。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
移除 libpq 中不恰当的 SSL 密钥文件所有权检查(Tom Lane)§
在之前的小版本中,我们将服务器对 SSL 私钥文件的权限检查规则复制到了 libpq 中。但我们不应该同时复制服务器的文件所有权检查。虽然在正常使用场景下这没有问题,但对于以 root 身份运行的客户端可能会导致意外的失败,在其他情况下也可能如此。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
确保 ecpg 合理地报告服务器连接丢失(Tom Lane)§
对 libpq 生成的错误结果(例如连接丢失报告)的错误处理,会导致打印 “(null)” 而非有用的错误消息;在更早的版本中则会导致崩溃。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
避免 ecpglib 在意外的操作顺序下出现核心转储(Tom Lane)§
某些操作如 EXEC SQL PREPARE 在建立任何数据库连接之前调用时会崩溃(而不是按预期报告错误)。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
在 ecpglib 中,避免冗余的 newlocale() 调用(Noah Misch)§ §
在首次连接时每个进程分配一次 C 区域设置对象,而不是每次查询都创建和释放区域设置对象。这缓解了 AIX 上 libc 的内存泄漏问题,并且可能在所有平台上提供一些性能改善。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
在 psql 的 \watch 命令中,使用 control-C 取消后回显换行符(Pavel Stehule)§
这防止 libedit(也可能是 libreadline)对光标所在列的位置产生混乱。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复在 pg_upgrade 使用 --clone 选项时 clone() 失败后可能报告错误的错误条件(Justin Pryzby)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 contrib/pg_stat_statements 以避免在 32 位平台上处理非常大的查询文本文件时出现问题(Tom Lane)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
确保 contrib/postgres_fdw 在发送 regconfig 和其他 reg* 类型的常量时使用正确的模式限定(Tom Lane)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
检测 shm_open() 的意外 EEXIST 错误(Thomas Munro)§
这避免了在 Solaris 上可能发生的崩溃。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
调整 PL/Perl 测试用例使其能在 Perl 5.36 下工作(Dagfinn Ilmari Mannsåker)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
避免在构建 PostgreSQL 时,当存在多个 OpenLDAP 安装时错误地使用过时的 libldap_r 库(Tom Lane)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
试试其他关键词,或。
对比以 PostgreSQL 发行说明为依据,汇总起始版本之后、目标版本及之前的变更,支持同一大版本内的小版本更新,以及跨大版本升级。跨大版本时,旧分支的维护记录只纳入到下一大版本首次发布之日,所有记录均不晚于目标版本的发布日期。大版本名称(如 18)指首个正式版本(18.0);测试版与开发快照会单独标注。
条目正文来自本站中文手册,版本清单、条目覆盖与提交依据逐一核对上游英文原文。每条变更保留完整说明与原文链接;分类用于辅助浏览,具体影响、适用条件与升级操作请阅读条目正文和各版本的升级说明。
同一修复可能回补到多个版本分支。对比会保守合并可确认相同的条目,并保留各分支完整说明;已知由起始版本包含的修复会排除。一条说明包含多个独立修复时,只有全部已包含才排除。大版本新功能不因与旧版补丁存在提交关联而合并,不能确认相同的条目继续保留。这是发行说明的累计差异,不能覆盖二进制程序之间的每一处代码变化。
CVE 独立依据 PostgreSQL 官方安全公告与漏洞记录计算:起始版本受影响、目标版本已修复或不受影响的漏洞才计入,按编号去重。目标版本仍受影响的漏洞另行提示;安全变更条数与 CVE 数量分别统计。
交互参考 pgversions.com 与 pgversionreport,内容来自 PostgreSQL 发行说明。更多历史资料见发行说明归档。