pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
文档版本对比
POSTGRESQL · VERSION COMPARE
本次发布的完整功能、修复与兼容性说明,以及它们在其他版本中的关联记录。
从起始版本之后,看到目标版本为止。大版本名称代表该系列首个正式版本。
收录 PostgreSQL 9.0 起的 17 个大版本、352 份发布说明;数据更新于 2026-09-26。
本次发布的全部变更
2024-02-08
15.6 受支持版本维护截止 2027-11-11
| CVE / 问题 | 严重程度 | 修复版本 |
|---|---|---|
| CVE-2024-0985 加强 REFRESH MATERIALIZED VIEW CONCURRENTLY 中的安全限制 | 8.0 | 15.6 |
对于运行 15.X 的用户,不需要执行导出/恢复。
但是,有一个已修复的错误可能导致在并发更新期间 GIN 索引损坏。如果你怀疑存在此类损坏,请在安装此更新后对受影响的索引进行重建索引。
此外,如果你从早于 15.5 的版本升级,请参见第 E.15 节。
变更
加强 REFRESH MATERIALIZED VIEW CONCURRENTLY 中的安全限制(Heikki Linnakangas)§ §
并发刷新命令的一个步骤在弱安全限制下运行。如果物化视图的所有者能够说服超级用户或其他高权限用户对该视图执行并发刷新,则视图所有者可以控制以运行 REFRESH 的用户权限执行的代码。修复了这个问题,使所有用户确定的代码都以视图所有者身份运行,这是预期的行为。
此错误的唯一已知利用方式在 PostgreSQL 16.0 及更高版本中不起作用,因此 v16 在实际中可能不受影响。
PostgreSQL 项目感谢 Pedro Gallegos 报告此问题。(CVE-2024-0985)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复执行 JIT 内联时的内存泄漏(Andres Freund,Daniel Gustafsson)§
已有多次报告指出后端进程在足够多的 JIT 编译后出现内存不足的情况。此修复应该可以解决该问题。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
在从 LWLock 出队时,避免需要搜索等待进程列表(Andres Freund)§
这修复了当等待者列表较长时的 O(N^2) 行为。在某些使用场景中,这会带来显著的吞吐量提升。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
避免生成不正确的分区连接计划(Richard Guo)§
一些涉及横向引用的不常见情况可能会创建不正确的计划。受影响的查询可能产生错误的结果,或出现诸如 “variable not found in subplan target list” 之类的奇怪错误,或执行器崩溃。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复子查询输出表达式在 PlaceHolderVars 中的不正确包装(Tom Lane)§
这修复了当子查询位于外连接下方且有一个输出列横向引用外连接范围之外的内容时的不正确结果。由于外连接的作用,该输出列可能不会在应为 NULL 时显示为 NULL。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复窗口函数运行条件的错误处理(Richard Guo)§
这一疏忽可能导致 “WindowFunc not found in subplan target lists” 错误。
变更
当 MERGE 导致跨分区更新时跳过不适当的操作(Dean Rasheed)§
在对分区表执行 MERGE UPDATE 操作时,如果由于更改了分区键列而将 UPDATE 转换为 DELETE 和 INSERT,则跳过触发 AFTER UPDATE ROW 触发器以及其他更新后操作(如 RLS 检查)。这些操作通常会失败,这就是为什么常规的 UPDATE 在这种情况下不执行它们;MERGE 也不应该执行。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
处理跨分区 MERGE 更新中的 BEFORE ROW DELETE 触发器(Dean Rasheed)§
如果此类触发器试图通过返回 NULL 来阻止更新,MERGE 会遇到错误或断言失败。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
防止在 BEFORE ROW UPDATE 触发器中访问不再固定的缓冲区(Alexander Lakhin,Tom Lane)§
如果正在更新的元组刚刚被另一个会话更新并移动到另一个页面,存在一个狭窄的时间窗口,我们会尝试从新的元组版本获取数据,但没有对其缓冲区进行固定。原则上这可能导致非更新列中出现垃圾数据。但在实际中出现问题的可能性似乎很低。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
避免在并行哈希连接中请求过大的共享内存区域(Thomas Munro,Andrei Lepikhov,Alexander Korotkov)§ §
限制值过大,允许在预期的 hash 表大小足够大时出现 “invalid DSA memory alloc request size” 错误。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
避免在外键强制触发器要更新的元组未通过额外可见性交叉检查时 heap_update() 和 heap_delete() 中的断言失败(Alexander Lakhin)§
此错误在非断言构建中没有影响。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 BRIN bloom 操作符类的 false_positive_rate 参数的过于严格的断言(Alexander Lakhin)§
此错误在非断言构建中同样没有影响。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复在复杂继承树上执行 ALTER TABLE ADD COLUMN 时可能的失败(Tender Wang)§
如果孙子表通过多个中间父表继承新列,该命令会失败并报告 “tuple already updated by self”。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 ALTER TEXT SEARCH CONFIGURATION ... MAPPING 命令中重复令牌名称的问题(Tender Wang,Michael Paquier)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
在 DROP STATISTICS 时正确锁定关联的表(Tomas Vondra)§
未能获取锁可能导致当 DROP 与 ANALYZE 并发执行时出现 “tuple concurrently deleted” 错误。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 GENERATED 和 DEFAULT 表达式中的函数波动性检查(Tom Lane)§
这些位置可能未能检测到易变函数默认参数表达式的插入,或者判定一个多态函数是易变的,而实际上对于相关的数据类型它是不可变的。这可能导致不正确地拒绝或接受 GENERATED 子句,或在 ALTER TABLE ADD COLUMN 中错误地应用常量默认值优化。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
检测新目录缓存条目在展开其字段时变为过时的情况(Tom Lane)§ §
我们在将目录元组插入目录缓存之前会展开其中的行外字段。这涉及数据库访问,可能导致目录缓存条目的失效 — 但新条目尚不在缓存中,所以我们未能察觉它也应该失效。结果是一个竞态条件,其中已经过时的缓存条目可能被创建,然后无限期地持续存在。这会导致难以预测的异常行为。通过在展开后重新检查元组的可见性来修复此问题。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复某些平台上边缘情况的整数溢出检测错误(Dean Rasheed)§
计算 0 - INT64_MIN 应该导致溢出错误,在大多数平台上确实如此。然而,既没有整数溢出内置函数也没有 128 位整数的平台无法发现该溢出,而是返回 INT64_MIN。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
检测在 timestamp 上加减 interval 时的儒略日溢出(Tom Lane)§
某些应该导致超出范围错误的情况反而产生了不正确的结果。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
增加 interval_mul() 和 interval_div() 中的更多溢出检查(Dean Rasheed)§
某些应该导致超出范围错误的情况反而产生了不正确的结果。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
确保在更改 stats_fetch_consistency 后丢弃缓存的统计信息(Shinya Kato)§
在某些代码路径中,可能会返回过期的统计信息。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
使 pg_file_settings 视图检查具有 backend 或 superuser-backend 上下文的设置中未应用值的有效性(Tom Lane)§
无效值未按预期在视图中标注。这个问题未被发现是因为这些组中的设置非常少。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
在将现有索引匹配到新分区索引时也匹配排序规则(Peter Eisentraut)§
之前我们可能接受与分区键对应元素排序规则不同的索引,可能导致异常行为。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复清理 GIN 索引内部页面不完整分裂时的锁定不足问题(Fei Changhong,Heikki Linnakangas)§
代码尝试使用共享锁而非排他锁来完成此操作。如果两个进程同时尝试清理,这可能导致索引损坏。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
避免在 GIN 索引插入中过早释放缓冲区固定(Tom Lane)§
如果索引根页面的分裂与我们自己的插入并发发生,代码可能报告 “buffer NNNN is not owned by resource owner”。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
避免分区 SP-GiST 索引的失败(Tom Lane)§
尝试使用这类索引可能导致 “No such file or directory” 错误。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复大对象的所有权变更报告(Tom Lane)§
无操作的 ALTER LARGE OBJECT OWNER 命令(即选择现有所有者的命令)向 PostAlterHook 传递了错误的类 ID,可能会混淆使用该钩子的任何扩展。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 EXPLAIN (BUFFERS) 中 I/O 计时数据的报告(Michael Paquier)§
标记为 “shared/local” 的数字实际上仅指共享缓冲区,因此将该标签更改为 “shared”。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
在从备份开始和结束恢复时增加更多 LOG 消息(Andres Freund)§
此更改在 postmaster 日志中提供了额外信息,可能有助于诊断恢复问题。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
防止备库在子事务期间错误处理已死亡的索引元组(Fei Changhong)§
startedInRecovery 标志在子事务中没有被正确设置。这仅影响已死亡索引元组的处理。它可能允许子事务中的查询忽略它应该返回的索引条目(如果它们在主库上已经死亡,但对备库事务来说还未死亡),或过早地将在主库上尚未死亡的索引条目标记为已死亡。目前尚不清楚后一种情况是否有严重后果,但这不是预期的行为。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复检查记录是否能放入 WAL 解码缓冲区时的整数溢出隐患(Thomas Munro)§
此错误似乎只是潜在的,除非在 64 位平台上运行 32 位的 PostgreSQL 构建。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复逻辑复制应用工作进程、其表同步工作进程和尝试修改订阅的会话进程之间的死锁(Shlok Kyal)§
死锁循环中的一条边不涉及锁等待,因此死锁未被检测到,会持续存在直到手动干预。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
确保 pgoutput 逻辑复制插件正确传输列默认值(Nikhil Benesch)§
ALTER TABLE ADD COLUMN 为新列设置常量默认值时会避免重写现有元组,而是期望读取代码在缺少该列的元组中插入正确的默认值。如果随后对该表启动了复制,pgoutput 会为此类列传输 NULL 而非正确的默认值,导致订阅端的复制不正确。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复对无列表的逻辑复制初始同步失败问题(Vignesh C)§
此情况会生成格式不正确的 COPY 命令。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
防止在逻辑解码期间使用错误的快照检查系统目录(Fei Changhong)§
如果解码从修改系统目录的事务中途开始,解码器可能无法识别这一点,导致它未能将该事务视为进行中的事务来进行目录查找。此修复处理了顶层事务已被标记为包含目录更改但其子事务未被标记的情况。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
当新客户端在未响应服务器的密码质询就断开连接时,返回正确的状态码(Liu Lang,Tom Lane)§
在某些情况下,我们会将此视为可记录的错误,但这不是预期的行为,并且容易产生日志噪音,因为常见的客户端如 psql 经常这样做。这也可能混淆使用 ClientAuthentication_hook 的扩展。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复与 OpenSSL 3.2 的不兼容性(Tristan Partin,Bo Andreson)§
使用 BIO “app_data” 字段进行我们的私有存储,而不是假定可以使用 “data” 字段。此错误此前不会造成问题,但在 3.2 中会导致崩溃和双重释放错误。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
对 OpenSSL 在错误时不设置 errno 的情况更加谨慎(Tom Lane)§
如果 errno 未被设置,则假设所报告失败的原因是读取到 EOF。这修复了罕见的奇怪错误报告情况,如 “could not accept SSL connection: Success”。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复外部数据包装器的 ForeignAsyncRequest 函数失败时的文件描述符泄漏(Heikki Linnakangas)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
将文件相关系统调用的 ENOMEM 错误报告为 ERRCODE_OUT_OF_MEMORY,而不是 ERRCODE_INTERNAL_ERROR(Alexander Kuzmenkov)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
在 PL/pgSQL 中,支持作为 SQL 标准体的 CREATE FUNCTION/CREATE PROCEDURE SQL 命令(Tom Lane)§
之前,由于函数体中出现的分号,此类情况会以解析错误失败。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
使 libpq 的 PQsendFlushRequest() 函数在与其他 PQsend 函数相同的规则下刷新客户端输出缓冲区(Jelte Fennema-Nio)§
在管道模式下,可能仍然需要额外调用 PQflush();但此更改消除了一些不一致性。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
避免 libpq 在两个不同线程中并发初始化 OpenSSL 支持时的竞态条件(Willi Mann,Michael Paquier)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 GSSAPI 数据传输中与时间相关的失败(Tom Lane)§
在非阻塞模式下使用 GSSAPI 加密时,libpq 有时会报告 “GSSAPI caller failed to retransmit all data needing to be retried”。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
在 pg_dump 中,不要导出扩展成员对象的 RLS 策略或安全标签(Tom Lane,Jacob Champion)§ §
之前,导出中会包含设置这些属性的命令,这实际上是不正确的,因为它们应该被视为扩展的内部事务。此外,恢复用户可能没有足够的权限来设置它们,导出用户也可能没有足够的权限来导出它们(因为导出 RLS 策略需要获取其表上的锁)。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
在 pg_dump 中,如果扩展统计对象的底层表没有被导出,则不要导出该统计对象(Rian McGuire,Tom Lane)§
这与索引等其他依赖对象的行为保持一致。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
使 pgbench 脚本以未关闭的管道结束时报告错误(Anthonin Bonnefoy)§
之前,如果 \startpipeline 命令缺少匹配的 \endpipeline,pgbench 会出现奇怪的行为。这看起来像是脚本错误而不是 pgbench 需要优雅处理的情况,因此抛出错误。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 contrib/intarray 中当包含等于 INT_MAX 的元素的数组被插入到 gist__int_ops 索引时的崩溃(Alexander Lakhin,Tom Lane)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
当 contrib/pageinspect 的 hash_bitmap_info() 函数应用于分区 hash 索引时报告更好的错误(Alexander Lakhin,Michael Paquier)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
当 contrib/pgstattuple 的 pgstathashindex() 函数应用于分区 hash 索引时报告更好的错误(Alexander Lakhin)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
在 Windows 上,在 pg_ctl 和 pg_regress 中启动子进程时抑制自动运行选项(Kyotaro Horiguchi)§ §
当通过 cmd.exe 启动子进程时,传递 /D 标志以防止执行注册表中指定的任何自动运行命令。这可以避免可能令人意外的副作用。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
将 is_valid_ascii() 从 mb/pg_wchar.h 移到 utils/ascii.h(Jubilee Young)§
此更改避免了在 pg_wchar.h 中包含 <simd.h> 的需要,这给某些第三方代码造成了问题。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 libxml2 版本 2.12.0 及更高版本的编译失败(Tom Lane)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
修复 Windows 上 WAL_DEBUG 代码的编译失败(Bharath Rupireddy)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
抑制来自 Python 头文件的编译器警告(Peter Eisentraut,Tom Lane)§
我们首选的编译器选项会对最近版本的 Python 头文件中出现的构造产生警告。使用 gcc 时,我们可以通过 pragma 来抑制这些警告。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
避免使用 LLVM 18 编译时的弃用警告(Thomas Munro)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
变更
更新时区数据文件至 tzdata 2024a 版本,包括格陵兰、哈萨克斯坦和巴勒斯坦的夏令时法律变更,以及南极站 Casey 和 Vostok 的修正。同时还有越南、多伦多和密克隆的历史修正。(Tom Lane)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
试试其他关键词,或。
对比以 PostgreSQL 发行说明为依据,汇总起始版本之后、目标版本及之前的变更,支持同一大版本内的小版本更新,以及跨大版本升级。跨大版本时,旧分支的维护记录只纳入到下一大版本首次发布之日,所有记录均不晚于目标版本的发布日期。大版本名称(如 18)指首个正式版本(18.0);测试版与开发快照会单独标注。
条目正文来自本站中文手册,版本清单、条目覆盖与提交依据逐一核对上游英文原文。每条变更保留完整说明与原文链接;分类用于辅助浏览,具体影响、适用条件与升级操作请阅读条目正文和各版本的升级说明。
同一修复可能回补到多个版本分支。对比会保守合并可确认相同的条目,并保留各分支完整说明;已知由起始版本包含的修复会排除。一条说明包含多个独立修复时,只有全部已包含才排除。大版本新功能不因与旧版补丁存在提交关联而合并,不能确认相同的条目继续保留。这是发行说明的累计差异,不能覆盖二进制程序之间的每一处代码变化。
CVE 独立依据 PostgreSQL 官方安全公告与漏洞记录计算:起始版本受影响、目标版本已修复或不受影响的漏洞才计入,按编号去重。目标版本仍受影响的漏洞另行提示;安全变更条数与 CVE 数量分别统计。
交互参考 pgversions.com 与 pgversionreport,内容来自 PostgreSQL 发行说明。更多历史资料见发行说明归档。