文档版本比较
POSTGRESQL · VERSION COMPARE
PostgreSQL 15.15 发布变化
此版本的完整功能、修复与兼容性说明,以及其他版本的关联记录。
包括起始版本之后至目标版本的变化。大版本号表示该分支的首个版本。
从数据库输出识别起始版本
完整发布变化
15.15
2025-11-13
15.15stable支持截止 2027-11-11
安全变化
| CVE / 问题 | 严重程度 | 修复版本 | 所选版本状态 |
|---|---|---|---|
| CVE-2025-12818 避免 libpq 中分配大小计算的整数溢出 | 15.15 | 已记录修复 | |
| CVE-2025-12817 检查 CREATE STATISTICS 中模式的 CREATE 权限 | 15.15 | 已记录修复 |
PostgreSQL 15.15
迁移与兼容性
对于运行 15.X 的用户,不需要执行导出/恢复。
但是,如果你从早于 15.14 的版本升级,请参见第 E.6 节。
安全检查 CREATE STATISTICS 中模式的 CREATE 权限
变更
检查 CREATE STATISTICS 中模式的 CREATE 权限(Jelte Fennema-Nio)§
此遗漏允许表的所有者在任何模式中创建统计对象,可能导致意外的命名冲突。
PostgreSQL 项目感谢 Jelte Fennema-Nio 报告此问题。(CVE-2025-12817)
安全避免 libpq 中分配大小计算的整数溢出
变更
避免 libpq 中分配大小计算的整数溢出(Jacob Champion)§
libpq 中有多处对内存分配所需大小的计算不够谨慎。足够大的输入可能导致整数溢出,从而分配一个不够大的缓冲区,进而导致写入超出缓冲区的末尾。
PostgreSQL 项目感谢 Positive Technologies 的 Aleksey Solovev 报告此问题。(CVE-2025-12818)
问题修复进一步修复 SIMILAR TO 正则表达式中字符类的处理
变更
进一步修复 SIMILAR TO 正则表达式中字符类的处理(Laurenz Albe)§
之前将 SIMILAR TO 模式匹配表达式转换为 POSIX 风格正则表达式的修复破坏了一个之前有效的边界情况:如果在左方括号之后紧接着一个转义字符,然后在转义序列之后紧接着一个右方括号(例如 [\w]),右方括号将不再被视为字符类的终止符。
问题修复修复对参数包含子查询且该子查询中有 FROM 引用聚合函数外部 CTE 的聚合函数的解析问题
变更
修复对参数包含子查询且该子查询中有 FROM 引用聚合函数外部 CTE 的聚合函数的解析问题(Tom Lane)§
这样的 CTE 引用在确定聚合的语义层级时必须像外层列引用一样处理,但之前没有被考虑在内,导致了晦涩的规划器或执行器错误。
问题修复修复估算 SubPlan 代价时在边界情况下出现的 “no relation entry for relid” 错误
变更
修复估算 SubPlan 代价时在边界情况下出现的 “no relation entry for relid” 错误(Richard Guo)§
关联记录 (4)
- 相同变化PostgreSQL 17.7 · 修复估算 SubPlan 代价时在边界情况下出现的 “no relation entry for relid” 错误
- 相同变化PostgreSQL 16.11 · 修复估算 SubPlan 代价时在边界情况下出现的 “no relation entry for relid” 错误
- 相同变化PostgreSQL 14.20 · 修复估算 SubPlan 代价时在边界情况下出现的 “no relation entry for relid” 错误
- 相同变化PostgreSQL 13.23 · 修复估算 SubPlan 代价时在边界情况下出现的“no relation entry for relid”错误
改进避免规划器在展开分区表时极小概率出现释放后继续使用的问题
变更
避免规划器在展开分区表时极小概率出现释放后继续使用的问题(Bernd Reiß)§
只有在最后一个仍存活的分区被并发删除时,才存在这种风险。
改进移除 B-树索引清理中的错误断言
变更
移除 B-树索引清理中的错误断言(Peter Geoghegan)§
问题修复修复在有多个扫描条件的 GIN 索引扫描中可能出现的无限循环
变更
修复在有多个扫描条件的 GIN 索引扫描中可能出现的无限循环(Tom Lane)§
GIN 可以处理能够拒绝不匹配条目但不适用于搜索相关条目的扫描条件,例如 tsquery 子句如 !term。但此类条件不能排在扫描条件数组的第一个位置。代码在所有情况下都未能确保这一点,导致包含此类条件与正常条件混合的查询可能根据查询中条件给出的顺序不同而正常工作或不工作。
改进确保 GIN 索引扫描可以被取消
变更
确保 GIN 索引扫描可以被取消(Tom Lane)§
某些代码路径能够长时间运行而不检查中断。
改进确保 BRIN 自动汇总为需要快照的索引表达式提供快照
变更
问题修复修复当表接近 232 页时 BRIN 索引扫描中的整数溢出风险
变更
修复当表接近 232 页时 BRIN 索引扫描中的整数溢出风险(Sunil S)§
此疏忽可能导致无限循环或扫描不需要的表页面。
问题修复修复 JIT 生成的元组解构代码中存储值的错误零扩展问题
变更
修复 JIT 生成的元组解构代码中存储值的错误零扩展问题(David Rowley)§
不使用 JIT 时,等效代码执行的是符号扩展而非零扩展,导致小整数数据类型的 Datum 表示不同。这种不一致在大多数情况下被掩盖了,但已知在使用 Memoize 计划节点时会导致 “could not find memoization table entry” 错误,还可能存在其他症状。
问题修复修复触发器结果关系信息缓存的错误逻辑
变更
修复触发器结果关系信息缓存的错误逻辑(David Rowley,Amit Langote)§
在分区的列集与其父分区表的列集在物理上不完全相同的情况下,此疏忽可能导致崩溃。
改进为 TID Scan 和 TID Range Scan 计划节点添加缺失的 EvalPlanQual 重检查
变更
为 TID Scan 和 TID Range Scan 计划节点添加缺失的 EvalPlanQual 重检查(Sophie Alpert,David Rowley)§ §
此遗漏导致在并发更新情况下可能不会重新检查 ctid 上的条件,使得更新的行为取决于选择了哪种计划类型。
关联记录 (4)
- 相同变化PostgreSQL 17.7 · 为 TID Scan 和 TID Range Scan 计划节点添加缺失的 EvalPlanQual 重检查
- 相同变化PostgreSQL 16.11 · 为 TID Scan 和 TID Range Scan 计划节点添加缺失的 EvalPlanQual 重检查
- 相同变化PostgreSQL 14.20 · 为 TID Scan 和 TID Range Scan 计划节点添加缺失的 EvalPlanQual 重检查
- 相同变化PostgreSQL 13.23 · 为 TID Scan 和 TID Range Scan 计划节点添加缺失的 EvalPlanQual 重检查
问题修复修复没有准备替代本地连接计划用于 EPQ 的外部或自定义连接的 EvalPlanQual 处理
变更
修复没有准备替代本地连接计划用于 EPQ 的外部或自定义连接的 EvalPlanQual 处理(Masahiko Sawada,Etsuro Fujita)§
在这种情况下,应该正常调用外部或自定义访问方法,但之前并未发生,通常会导致崩溃。
关联记录 (5)
- 相同变化PostgreSQL 18.1 · 修复没有准备替代本地连接计划用于 EPQ 的外部或自定义连接的 EvalPlanQual 处理
- 相同变化PostgreSQL 17.7 · 修复没有准备替代本地连接计划用于 EPQ 的外部或自定义连接的 EvalPlanQual 处理
- 相同变化PostgreSQL 16.11 · 修复没有准备替代本地连接计划用于 EPQ 的外部或自定义连接的 EvalPlanQual 处理
- 相同变化PostgreSQL 14.20 · 修复没有准备替代本地连接计划用于 EPQ 的外部或自定义连接的 EvalPlanQual 处理
- 相同变化PostgreSQL 13.23 · 修复没有准备替代本地连接计划用于 EPQ 的外部或自定义连接的 EvalPlanQual 处理
改进避免在 DETACH CONCURRENTLY 期间重复 hash 分区约束
变更
避免在 DETACH CONCURRENTLY 期间重复 hash 分区约束(Haiyang Li)§
ALTER TABLE DETACH PARTITION CONCURRENTLY 被编写为向现已分离的分区添加分区约束的副本。这是不恰当的,部分原因是非并发 DETACH 不会这样做,但主要原因是在 hash 分区的情况下,约束表达式包含对父表 OID 的引用。这在导出/恢复期间,或在 DETACH 之后父表被删除时会导致问题。在 v19 及更高版本中,我们将不再创建任何此类约束副本。在已发布的分支中,为了最大限度地降低不可预见后果的风险,仅在 hash 分区的情况下跳过添加复制约束。
改进禁止在分区键中使用生成列
变更
禁止在分区键中使用生成列(Jian He,Ashutosh Bapat)§
这本来已经不被允许,但检查遗漏了一些情况,例如列引用隐含在整行引用中的情况。
改进禁止在 COPY ... FROM ... WHERE 子句中使用生成列
变更
禁止在 COPY ... FROM ... WHERE 子句中使用生成列(Peter Eisentraut,Jian He)§
以前,尝试引用此类列会导致不正确的行为或晦涩的错误消息,因为在执行 WHERE 过滤时生成列尚未计算。
关联记录 (5)
问题修复修复 pg_temp 中统计对象的可见性检查
变更
修复 pg_temp 中统计对象的可见性检查(Noah Misch)§
位于临时模式中的统计对象如果不加模式限定就无法命名,但 pg_statistics_obj_is_visible() 遗漏了这一点,可能无论如何都返回 “true”。反过来,像 pg_describe_object() 这样的函数可能无法按预期对对象名称进行模式限定。
问题修复修复 pg_event_trigger_dropped_objects() 对临时状态的报告
问题修复修复 hash 子计划中的内存泄漏
变更
修复 hash 子计划中的内存泄漏(Haiyang Li)§
用于对元组进行 hash 运算的 hash 函数所消耗的任何内存都构成了查询生命周期的内存泄漏。这种情况的一种发生方式是参与 hash 运算的值需要 de-toast。
问题修复修复 WAL 重放数据库创建过程中的轻微内存泄漏
变更
修复 WAL 重放数据库创建过程中的轻微内存泄漏(Nathan Bossart)§
问题修复修复内存不足失败后共享统计信息表损坏的问题
变更
修复内存不足失败后共享统计信息表损坏的问题(Mikhail Kot)§
之前,在创建新的 hash 表条目过程中发生内存不足失败会留下一个损坏的条目,可能在稍后导致其他会话出错。
问题修复修复 MERGE 中的并发更新问题
变更
修复 MERGE 中的并发更新问题(Yugo Nagata)§
当执行 MERGE UPDATE 操作时,如果目标行有多个并发更新,加锁重试代码有时会错误地识别目标元组的最新版本,导致不正确的结果。
改进为 MERGE 和 INSERT ... ON CONFLICT DO UPDATE 添加缺失的副本标识检查
变更
为 MERGE 和 INSERT ... ON CONFLICT DO UPDATE 添加缺失的副本标识检查(Zhijie Hou)§ § §
如果 MERGE 可能需要执行更新或删除操作,且目标表发布更新或删除,则要求该表定义了 REPLICA IDENTITY。未能要求这一点可能会静默地破坏复制。同样,带有 UPDATE 选项的 INSERT 如果目标表发布插入或更新,也必须要求 REPLICA IDENTITY。
关联记录 (4)
- 相同变化PostgreSQL 17.7 · 为 MERGE 和 INSERT ... ON CONFLICT DO UPDATE 添加缺失的副本标识检查
- 相同变化PostgreSQL 16.11 · 为 MERGE 和 INSERT ... ON CONFLICT DO UPDATE 添加缺失的副本标识检查
- 相同变化PostgreSQL 14.20 · 为 MERGE 和 INSERT ... ON CONFLICT DO UPDATE 添加缺失的副本标识检查
- 相同变化PostgreSQL 13.23 · 为 MERGE 和 INSERT ... ON CONFLICT DO UPDATE 添加缺失的副本标识检查
问题修复避免当发布者与订阅者在同一服务器上时,DROP SUBSCRIPTION 期间的死锁
变更
避免当发布者与订阅者在同一服务器上时,DROP SUBSCRIPTION 期间的死锁(Dilip Kumar)§
问题修复修复 pg_stat_replication 视图中复制延迟的错误报告
变更
修复 pg_stat_replication 视图中复制延迟的错误报告(Fujii Masao)§
如果任何备库的重放 LSN 停止前进,write_lag 和 flush_lag 列最终将停止更新。
改进避免关于无效 primary_slot_name 设置的重复日志消息
变更
避免关于无效 primary_slot_name 设置的重复日志消息(Fujii Masao)§
改进在写入复制槽状态到磁盘失败后删除未完成的槽状态文件
变更
在写入复制槽状态到磁盘失败后删除未完成的槽状态文件(Michael Paquier)§
以前,磁盘空间不足等失败会留下一个临时 state.tmp 文件。这是有问题的,因为它会阻止所有后续写入状态的尝试,需要手动干预来清理。
改进避免从流式传输切换到归档 WAL 源时不必要的 WAL 接收进程关闭
变更
避免从流式传输切换到归档 WAL 源时不必要的 WAL 接收进程关闭(Xuneng Zhou)§
在时间线切换期间,备库的 WAL 接收进程应保持活动状态,等待新的 WAL 流式传输起始点。相反,它反复关闭并立即重新启动,这可能会混淆状态监控代码。
改进避免由于常规表和临时表之间文件编号偶然冲突导致的逻辑复制失败
变更
避免由于常规表和临时表之间文件编号偶然冲突导致的逻辑复制失败(Vignesh C)§
这一低概率问题表现为像 “unexpected duplicate for tablespace X, relfilenode Y” 这样的瞬态错误。contrib/autoprewarm 也受到影响。此修复的一个副作用是 SQL 函数 pg_filenode_relation() 现在将忽略临时表。
问题修复修复 pgoutput 逻辑解码插件维护的关系同步缓存中的释放后使用问题
变更
修复 pgoutput 逻辑解码插件维护的关系同步缓存中的释放后使用问题(Vignesh C,Masahiko Sawada)§
逻辑解码期间的错误可能导致同一会话中后续逻辑解码尝试崩溃。此情况仅在通过 SQL 函数调用 pgoutput 时可以触发。
改进避免在单用户模式下尝试释放复制槽时出现断言失败
变更
避免在单用户模式下尝试释放复制槽时出现断言失败(Hayato Kuroda)§
问题修复修复关于检查用户是否具有 Windows 管理员权限时失败消息的错误打印
变更
修复关于检查用户是否具有 Windows 管理员权限时失败消息的错误打印(Bryan Green)§
此代码本来会崩溃或至少打印乱码。但没有此类情况被报告过,这表明这些系统调用的失败极为罕见。
关联记录 (5)
改进避免在 macOS 和 BSD 平台上与预先存在的信号量集冲突时启动失败
变更
避免在 macOS 和 BSD 平台上与预先存在的信号量集冲突时启动失败(Tom Lane)§
如果预先存在的信号量集的信号量数量少于我们请求的数量,这些平台返回 EINVAL 而不是我们代码所预期的 EEXIST,导致数据库启动失败。
问题修复修复 64 位 Windows 调试构建中虚假的内存上下文检查警告
变更
修复 64 位 Windows 调试构建中虚假的内存上下文检查警告(David Rowley)§
改进正确处理 PL/pgSQL 赋值语句中的 GROUP BY DISTINCT
变更
正确处理 PL/pgSQL 赋值语句中的 GROUP BY DISTINCT(Tom Lane)§
解析器在此上下文中未能记录 DISTINCT 选项,导致命令的行为就像是普通的 GROUP BY。
问题修复避免在 PL/Python 中处理 SQL 错误时泄漏内存
变更
避免在 PL/Python 中处理 SQL 错误时泄漏内存(Tom Lane)§
这修复了在我们之前的小版本中引入的会话生命周期内存泄漏。
问题修复修复 libpq 对高位设置字符的跟踪输出
变更
修复 libpq 对高位设置字符的跟踪输出(Ran Benita)§
在 char 被视为有符号类型的平台上,输出包含难看的 \xffffff 装饰。
问题修复修复 libpq 在 Windows 上 GSSAPI 逻辑中处理套接字相关错误的问题
变更
修复 libpq 在 Windows 上 GSSAPI 逻辑中处理套接字相关错误的问题(Ning Wu,Tom Lane)§
使用 GSSAPI 加密/解密传输数据的代码未能正确识别连接套接字上的错误条件,因为 Windows 报告这些错误的方式与其他平台不同。这导致在 Windows 上无法建立此类连接。
关联记录 (5)
- 相同变化PostgreSQL 18.1 · 修复 libpq 在 Windows 上 GSSAPI 逻辑中处理套接字相关错误的问题
- 相同变化PostgreSQL 17.7 · 修复 libpq 在 Windows 上 GSSAPI 逻辑中处理套接字相关错误的问题
- 相同变化PostgreSQL 16.11 · 修复 libpq 在 Windows 上 GSSAPI 逻辑中处理套接字相关错误的问题
- 相同变化PostgreSQL 14.20 · 修复 libpq 在 Windows 上 GSSAPI 逻辑中处理套接字相关错误的问题
- 相同变化PostgreSQL 13.23 · 修复 libpq 在 Windows 上 GSSAPI 逻辑中处理套接字相关错误的问题
改进在 pg_dump 中,导出订阅和事件触发器上的安全标签
变更
在 pg_dump 中,导出订阅和事件触发器上的安全标签(Jian He,Fujii Masao)§
这些类型对象上的标签之前被遗漏了。
问题修复修复 pg_dump 中默认 ACL 和外键约束的排序
变更
改进在 pg_dump 中,为单独导出的域约束的注释标记正确的依赖关系
变更
在 pg_dump 中,为单独导出的域约束的注释标记正确的依赖关系(Noah Misch)§
此错误可能导致并行 pg_restore 在约束本身恢复之前就尝试创建注释。
改进在 pg_restore 中,跳过未被恢复的发布和订阅的注释和安全标签
问题修复修复 pg_dump 和 pg_restore 中数据压缩逻辑的各种错误
变更
修复 pg_dump 和 pg_restore 中数据压缩逻辑的各种错误(Daniel Gustafsson,Tom Lane)§
多处缺少或不正确的错误检查,还存在会在大端硬件上出现的可移植性问题。这些问题一直未被发现,因为此代码仅用于读取目录格式导出中压缩的 TOC 文件。 pg_dump 不会生成这样的导出;该情况只有在事后手动压缩 TOC 文件时才会出现,这是一种受支持但非常罕见的操作。
关联记录 (5)
问题修复修复 pgbench 以在启动 COPY 操作时妥善报告错误并退出
变更
修复 pgbench 以在启动 COPY 操作时妥善报告错误并退出(Anthonin Bonnefoy)§
pgbench 不打算支持这种情况,但之前会进入无限循环。
问题修复修复 pgbench 的多错误报告
变更
修复 pgbench 的多错误报告(Yugo Nagata)§
在连续两次 PQgetResult 调用都失败的情况下, pgbench 可能报告错误的错误消息。
问题修复在 pgbench 中,修复流水线模式下关于错误的错误断言
变更
在 pgbench 中,修复流水线模式下关于错误的错误断言(Yugo Nagata)§
改进确保 contrib/pg_buffercache 函数可以被取消
变更
确保 contrib/pg_buffercache 函数可以被取消(Satyanarayana Narlapuram,Yuhang Qiu)§
某些代码路径能够长时间运行而不检查中断。
问题修复修复 contrib/pg_prewarm 对索引的权限检查
变更
修复 contrib/pg_prewarm 对索引的权限检查(Ayush Vatsa,Nathan Bossart)§
pg_prewarm() 要求对要预热的关系具有 SELECT 权限。但由于索引没有自己的 SQL 权限,这导致非超级用户无法预热索引。改为检查索引所属表的 SELECT 权限。
改进使 contrib/pgstattuple 更健壮地处理空页面或无效索引页面
变更
使 contrib/pgstattuple 更健壮地处理空页面或无效索引页面(Nitin Motiani)§
将全零页面计为空闲空间,并忽略根据页面特殊空间大小检查判定为无效的页面。B-树索引的代码已经将全零页面计为空闲空间,但 hash 和 gist 的代码会报告错误并退出,这被发现对用户不太友好。同样,使这三种情况在忽略损坏页面而非抛出错误方面保持一致。
关联记录 (5)
- 相同变化PostgreSQL 18.1 · 使 contrib/pgstattuple 更健壮地处理空页面或无效索引页面
- 相同变化PostgreSQL 17.7 · 使 contrib/pgstattuple 更健壮地处理空页面或无效索引页面
- 相同变化PostgreSQL 16.11 · 使 contrib/pgstattuple 更健壮地处理空页面或无效索引页面
- 相同变化PostgreSQL 14.20 · 使 contrib/pgstattuple 更健壮地处理空页面或无效索引页面
- 相同变化PostgreSQL 13.23 · 使 contrib/pgstattuple 更健壮地处理空页面或无效索引页面
改进加固我们的读写屏障宏以满足 Clang 的要求
变更
加固我们的读写屏障宏以满足 Clang 的要求(Thomas Munro)§
我们假设 __atomic_thread_fence() 是防止 C 编译器在其周围重排内存访问的充分屏障,但似乎对于 Clang 来说并非如此,导致它至少为 RISC-V、MIPS 和 LoongArch 机器生成不正确的代码。添加显式编译器屏障来修复此问题。
问题修复修复使用 LLVM 21 及更高版本的构建
变更
修复使用 LLVM 21 及更高版本的构建(Holger Hoffstätte)§
问题修复修复 PGXS 构建基础设施以支持为扩展构建 NLS po 文件
变更
修复 PGXS 构建基础设施以支持为扩展构建 NLS po 文件(Ryo Matsumura)§
没有匹配的变化
尝试其他关键词,或 .
如何生成比较结果?
比较依据起始版本之后至目标版本的 PostgreSQL 发布说明。经核实的回补重复项会谨慎合并,保留每条原始说明;相关提交可能涉及独立变化,仍作为不同记录保留。
发布快照: 2026-09-26 · 安全快照: 2026-09-26
内容来自 PostgreSQL 发布说明。交互方式参考 pgversions.com 与 pgversionreport.