pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
文档版本对比
POSTGRESQL · VERSION COMPARE
本次发布的完整功能、修复与兼容性说明,以及它们在其他版本中的关联记录。
从起始版本之后,看到目标版本为止。大版本名称代表该系列首个正式版本。
收录 PostgreSQL 9.0 起的 17 个大版本、352 份发布说明;数据更新于 2026-09-26。
本次发布的全部变更
2023-08-10
15.4 受支持版本维护截止 2027-11-11
| CVE / 问题 | 严重程度 | 修复版本 |
|---|---|---|
| CVE-2023-39417 如果模式或所有者名称包含引号、反斜杠或美元符号,则不允许将其替换到扩展脚本中 | 7.5 | 15.4 |
| CVE-2023-39418 修复 MERGE 以正确执行行安全策略 | 3.1 | 15.4 |
对于运行 15.X 的用户,不需要执行导出/恢复。
但是,如果你使用 BRIN 索引,建议对其重建;请参见下面的第三条变更日志条目。
另外,如果你从早于 15.1 的版本升级,请参见第 E.19 节。
变更
如果模式或所有者名称包含引号、反斜杠或美元符号,则不允许将其替换到扩展脚本中(Noah Misch)§
此限制可防止受信任的扩展中的 SQL 注入风险。
PostgreSQL 项目感谢 Micah Gates、Valerie Woolard、Tim Carey-Smith 和 Christoph Berg 报告此问题。(CVE-2023-39417)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 MERGE 以正确执行行安全策略(Dean Rasheed)§
当 MERGE 执行 UPDATE 操作时,它应该执行目标表上定义的 UPDATE 或 SELECT RLS 策略,以与带有 WHERE 子句的普通 UPDATE 的工作方式保持一致。但实际上它对 INSERT 和 UPDATE 操作都执行了 INSERT RLS 策略。
此外,当 MERGE 执行 DO NOTHING 操作时,它对现有行应用了目标表的 DELETE RLS 策略,即使这些行并未被删除。虽然这不是安全问题,但可能导致不必要的错误。
PostgreSQL 项目感谢 Dean Rasheed 报告此问题。(CVE-2023-39418)
变更
修复 BRIN 索引中空范围(无行)和全 NULL 范围的混淆,以及全 NULL 摘要的错误合并(Tomas Vondra)§ §
这些疏忽中的每一个都可能导致忘记 BRIN 索引范围包含 NULL 值,从而可能使后续应返回 NULL 值的查询遗漏这些值。
此修复本身不会纠正错误的 BRIN 条目。建议对可能用于搜索空值的 BRIN 索引执行 REINDEX。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
避免在 DROP DATABASE 被中断时留下损坏的数据库(Andres Freund)§
如果 DROP DATABASE 在已开始执行不可逆步骤之后被中断,目标数据库仍然可以访问(因为其 pg_database 行的移除会被回滚),但其内容已损坏。修复方法是在开始执行不可逆操作之前将数据库标记为不可访问。此后的失败将使数据库仍部分存在,但除了再次执行 DROP DATABASE 之外无法对其进行任何操作。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
确保分区索引在创建时被正确标记为有效或无效(Michael Paquier)§
如果新建的分区索引匹配某个分区上已有但无效的索引,该分区索引可能会被过早地标记为有效。这可能导致后续对分区表的查询出现异常行为或断言失败。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
在 ALTER TABLE ATTACH PARTITION 期间将分区索引与子索引匹配时忽略无效的子索引(Michael Paquier)§
此类索引现在将被忽略,并创建一个新的子索引来替代。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复在所有分区都已附加后将分区索引标记为有效时可能出现的失败(Michael Paquier)§
更新索引的 pg_index 条目时可能对其他列使用了过期的数据。报告的一个症状是 “attempted to update invisible tuple” 错误。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 ALTER EXTENSION SET SCHEMA,使其在扩展包含扩展模式之外的对象时报告错误(Michael Paquier,Heikki Linnakangas)§
当扩展包含多个模式中的对象时报告错误一直是预期行为;但检查逻辑编写有误,未能检测到某些情况,导致令人意外的行为。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复表的访问方法依赖关系跟踪(Michael Paquier)§
ALTER TABLE ... SET ACCESS METHOD 在更改表的访问方法时未能更新相关的 pg_depend 条目。当使用非内置访问方法时,这会导致即使表仍然依赖某个访问方法,该方法也可能被删除的风险。此修复纠正了 ALTER TABLE 中的逻辑,但不会调整已缺失的 pg_depend 条目。
变更
不使用部分唯一索引在规划器中进行唯一性证明(David Rowley)§
这可能产生不正确的计划,因为如果相关索引未被用于扫描表,从表中读取的行的假定唯一性可能不成立。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
不要对具有易变连接条件的横向连接使用 Memoize(Richard Guo)§
对包含易变过滤条件的子计划应用 Memoize 可能导致错误的结果。避免这样做的检查遗漏了使用 LATERAL 时可能出现的一些情况。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
避免为具有伪常量连接子句的外部连接生成不正确的计划(Etsuro Fujita)§
规划器目前缺少将伪常量连接子句附加到下推的远程连接的支持,因此在此类情况下禁用远程连接的生成。(更好的解决方案需要对规划器数据结构进行破坏 ABI 的更改,因此必须等到未来的主版本。)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
在展开规则动作时正确处理 RLS 策略表达式和安全屏障视图中的子 SELECT(Tom Lane)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 SERIALIZABLE 隔离模式下冲突检测中的竞争条件(Thomas Munro)§ § §
使用位图堆扫描、使用 GIN 索引以及检查初始为空的 B-树索引时可能会遗漏冲突。所有这些情况都可能因不当允许相互冲突的事务提交而破坏可串行性。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复对继承或分区目标表执行 EvalPlanQual 检查时的错误行为(Tom Lane)§
此疏忽可能导致在 READ COMMITTED 隔离模式下,应因并发冲突更新而跳过的更新或删除操作被执行。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复当内侧 hash 键包含来自外层嵌套循环的 Param 时的哈希连接问题(Tom Lane)§
当此类 Param 的值发生变化后重新扫描连接时,我们必须重建 hash 表,但之前忽略了这样做。这可能导致缺少连接输出行。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复尝试更新复合列的字段时的间歇性失败(Tom Lane)§
如果复合列的整体值宽到需要行外 TOAST 存储,那么在不恰当时机发生的缓存刷新可能导致错误或服务器崩溃。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
防止增量排序计划节点重新扫描时的查询级内存泄漏(James Coleman,Laurenz Albe,Tom Lane)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
在 jsonpath 的 datetime() 方法的输入中接受分数秒(Tom Lane)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
防止使用非常复杂的文本检索模式时的栈溢出崩溃(Tom Lane)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
允许 pg_hba.conf 和 pg_ident.conf 中的令牌长度最多为 10240 字节(Tom Lane)§
之前 256 字节的限制已被发现对某些使用场景不足。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
确保当扩展声明其 GUC 前缀为保留时,所有现有的占位符都被检查是否匹配(Karina Litskevich,Ekaterina Sokolova)§
错误的循环逻辑可能导致某些条目被跳过。
变更
修复 C++ 内存不足情况的错误处理(Heikki Linnakangas)§
如果正在使用 JIT,C++ new 调用中的内存不足会导致 PostgreSQL 的 FATAL 错误,而非预期的 C++ 异常。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
避免在删除订阅时泄漏统计条目(Masahiko Sawada)§
变更
避免在页面释放导致空闲空间范围合并时丢失对可能有用的共享内存段的跟踪(Dongming Liu)§
确保将该段移动到与其新的空闲空间量相应的 “bin” 中,以便后续搜索能够找到它。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
允许 VACUUM 在检测到某些类型的 B-树索引损坏后继续执行(Peter Geoghegan)§ §
如果检测到无效的兄弟页面链接,记录该问题并继续执行,而不是像以前那样抛出错误。只有 REINDEX 才能修复损坏的索引,但阻止 VACUUM 在修复之前完成可能使情况更加恶化。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
确保在 VACUUM 检测到 pg_database.datfrozenxid 或 pg_database.datminmxid 中的无效数据后释放 WrapLimitsVacuumLock(Andres Freund)§
未能释放此锁可能导致后续死锁,尽管如果会话退出或遇到其他错误,该锁会被清理。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
避免在崩溃恢复期间对预备事务的双重重放(suyu.cmj,Michael Paquier)§ §
在检查点进行到部分时发生崩溃,且某些两阶段事务状态数据已被该检查点刷新到磁盘后,崩溃恢复可能尝试两次重放预备事务,导致诸如启动进程中 “lock is already held” 之类的致命错误。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
确保新建但仍为空的表在下一次检查点时执行 fsync(Heikki Linnakangas)§
如果没有这一步,在操作系统崩溃导致空文件消失后,对该表的后续操作可能会出现 “could not open file” 错误。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
确保不记录 WAL 的索引的 init fork 的创建被记录到 WAL(Heikki Linnakangas)§
虽然不记录 WAL 的索引的主数据 fork 不记录 WAL,但其 init fork 应该记录,以确保在崩溃后有一个一致的状态来恢复索引。如果 init fork 不包含数据,则此步骤被遗漏,这是标准索引 AM 不使用的情况;但也许某些扩展会有这种行为。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
消除虚假的 “missing contrecord” 错误(Thomas Munro)§
将此情况视为普通的 WAL 结束,以避免来自 pg_waldump 和 walsender 的不准确错误日志。
变更
修复 jsonpath 代码中过于严格的断言(David Rowley)§
如果查询对 like_regex 结果应用 .type() 操作符,则此断言会失败。在非断言构建中没有错误。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
避免在已中止的事务中通过扩展查询协议处理空语句时的断言失败(Tom Lane)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
避免在事务内更改 stats_fetch_consistency 设置时的断言失败(Kyotaro Horiguchi)§
变更
修复 contrib/fuzzystrmatch 的 Soundex difference() 函数以合理地处理空输入(Alexander Lakhin,Tom Lane)§
不包含字母字符的输入字符串会产生不可预测的输出。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
加强 contrib/hstore 输入中的空白检查(Evan Jones)§
在某些情况下,字符会被错误地识别为空白从而被丢弃。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
禁止使用 contrib/intarray 的 gist__int_ops 索引操作符类处理过大的输入数组(Ankit Kumar Pandey,Alexander Lakhin)§
之前此代码会报告一个 NOTICE 但仍然继续执行,创建一个无效的索引条目,在读取索引时可能导致崩溃。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
避免 contrib/intarray 中 GiST 索引条目的无用双重解压(Konstantin Knizhnik,Matthias van de Meent,Tom Lane)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 contrib/pageinspect 的 gist_page_items() 函数,使其在存在内含列的索引时正常工作(Alexander Lakhin,Michael Paquier)§
之前,如果索引有内含列,gist_page_items() 无法在索引叶子页面上显示这些值,或在非叶子页面上直接崩溃。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
在 psql 中,当标准输入/标准输出不是终端时忽略 PSQL_WATCH_PAGER 环境变量(Tom Lane)§
这与 \watch 以外的命令中对 PSQL_PAGER 的处理方式一致。
变更
修复 pg_dump 以正确处理函数体需要对唯一索引有解析时依赖的新式 SQL 语言函数(Tom Lane)§
此类情况可能出现在 GROUP BY 和 ON CONFLICT 子句中。函数必须在导出输出中推迟到唯一索引之后,但 pg_dump 之前没有这样做,而是打印关于 “could not resolve dependency loop” 的警告。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
改进 pg_dump 对依赖循环问题详细信息的显示(Tom Lane)§
变更
避免 pgbench 在空管线和预备模式下崩溃(Álvaro Herrera)§
变更
确保关系缓存条目中的 pg_index.indisreplident 保持最新(Shruthi Gowda)§
此值在某些情况下可能是过期的。核心代码没有依赖关系缓存的此副本,因此就 PostgreSQL 本身而言这只是一个潜在缺陷;但对于某些扩展来说可能是一个实际缺陷。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 make_etags 脚本使其与非 Exuberant 的 ctags 一起工作(Masahiko Sawada)§
试试其他关键词,或。
对比以 PostgreSQL 发行说明为依据,汇总起始版本之后、目标版本及之前的变更,支持同一大版本内的小版本更新,以及跨大版本升级。跨大版本时,旧分支的维护记录只纳入到下一大版本首次发布之日,所有记录均不晚于目标版本的发布日期。大版本名称(如 18)指首个正式版本(18.0);测试版与开发快照会单独标注。
条目正文来自本站中文手册,版本清单、条目覆盖与提交依据逐一核对上游英文原文。每条变更保留完整说明与原文链接;分类用于辅助浏览,具体影响、适用条件与升级操作请阅读条目正文和各版本的升级说明。
同一修复可能回补到多个版本分支。对比会保守合并可确认相同的条目,并保留各分支完整说明;已知由起始版本包含的修复会排除。一条说明包含多个独立修复时,只有全部已包含才排除。大版本新功能不因与旧版补丁存在提交关联而合并,不能确认相同的条目继续保留。这是发行说明的累计差异,不能覆盖二进制程序之间的每一处代码变化。
CVE 独立依据 PostgreSQL 官方安全公告与漏洞记录计算:起始版本受影响、目标版本已修复或不受影响的漏洞才计入,按编号去重。目标版本仍受影响的漏洞另行提示;安全变更条数与 CVE 数量分别统计。
交互参考 pgversions.com 与 pgversionreport,内容来自 PostgreSQL 发行说明。更多历史资料见发行说明归档。