文档版本比较
POSTGRESQL · VERSION COMPARE
PostgreSQL 18.1 发布变化
此版本的完整功能、修复与兼容性说明,以及其他版本的关联记录。
包括起始版本之后至目标版本的变化。大版本号表示该分支的首个版本。
从数据库输出识别起始版本
完整发布变化
18.1
2025-11-13
18.1stable支持截止 2030-11-14
安全变化
| CVE / 问题 | 严重程度 | 修复版本 | 所选版本状态 |
|---|---|---|---|
| CVE-2025-12818 避免 libpq 中分配大小计算的整数溢出 | 18.1 | 已记录修复 | |
| CVE-2025-12817 检查 CREATE STATISTICS 中模式的 CREATE 权限 | 18.1 | 已记录修复 |
PostgreSQL 18.1
迁移与兼容性
对于运行 18.X 的用户,不需要执行导出/恢复。
安全检查 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)
改进防止当 JSON_VALUE 等 SQL/JSON 函数的 DEFAULT 子句包含 COLLATE 表达式时出现 “unrecognized node type” 错误
变更
改进不要在哈希右半连接中使用并行
变更
不要在哈希右半连接中使用并行(Richard Guo)§
由于在更新连接的共享 hash 表时存在竞态条件,该情况无法可靠工作。
改进避免创建有序追加计划时可能发生的除零错误
变更
避免创建有序追加计划时可能发生的除零错误(Richard Guo)§
这种错误可能导致错误选择最便宜的路径,或导致调试构建中的断言失败。
问题修复修复使用支持有序访问但不支持仅索引扫描的索引类型时发生的规划器失败
变更
修复使用支持有序访问但不支持仅索引扫描的索引类型时发生的规划器失败(Maxime Schoemans)§
这一疏漏会导致 “no data returned for index-only scan” 等错误。任何核心内置索引类型都不会出现这种情况,但一些扩展遇到了此问题。
改进移除 B-树索引清理中的错误断言
变更
移除 B-树索引清理中的错误断言(Peter Geoghegan)§
改进避免并行 GIN 索引构建期间可能发生的内存不足或 “invalid memory alloc request size” 失败
变更
避免并行 GIN 索引构建期间可能发生的内存不足或 “invalid memory alloc request size” 失败(Tomas Vondra)§
改进确保 BRIN 自动汇总为需要快照的索引表达式提供快照
变更
问题修复修复当表接近 232 页时 BRIN 索引扫描中的整数溢出风险
变更
修复当表接近 232 页时 BRIN 索引扫描中的整数溢出风险(Sunil S)§
此疏忽可能导致无限循环或扫描不需要的表页面。
问题修复修复 JIT 生成的元组解构代码中存储值的错误零扩展问题
变更
修复 JIT 生成的元组解构代码中存储值的错误零扩展问题(David Rowley)§
不使用 JIT 时,等效代码执行的是符号扩展而非零扩展,导致小整数数据类型的 Datum 表示不同。这种不一致在大多数情况下被掩盖了,但已知在使用 Memoize 计划节点时会导致 “could not find memoization table entry” 错误,还可能存在其他症状。
问题修复修复处理带 hash 的 GROUPING SETS 查询时罕见的崩溃
变更
修复处理带 hash 的 GROUPING SETS 查询时罕见的崩溃(David Rowley)§
问题修复修复哈希连接中有误的 hash 表大小选择逻辑
变更
修复哈希连接中有误的 hash 表大小选择逻辑(Tomas Vondra)§
哈希连接有时会使用比预期更多的内存,或者未能以高效的方式划分这些内存。
改进改进统计信息操纵函数中的关系查找逻辑
问题修复修复触发器结果关系信息缓存的错误逻辑
变更
修复触发器结果关系信息缓存的错误逻辑(David Rowley,Amit Langote)§
在分区的列集与其父分区表的列集在物理上不完全相同的情况下,此疏忽可能导致崩溃。
问题修复修复在分区表上执行 EvalPlanQual 重新检查期间发生的崩溃
变更
修复在分区表上执行 EvalPlanQual 重新检查期间发生的崩溃(David Rowley、Amit Langote)§
问题修复修复没有准备替代本地连接计划用于 EPQ 的外部或自定义连接的 EvalPlanQual 处理
变更
修复没有准备替代本地连接计划用于 EPQ 的外部或自定义连接的 EvalPlanQual 处理(Masahiko Sawada,Etsuro Fujita)§
在这种情况下,应该正常调用外部或自定义访问方法,但之前并未发生,通常会导致崩溃。
关联记录 (5)
- 相同变化PostgreSQL 17.7 · 修复没有准备替代本地连接计划用于 EPQ 的外部或自定义连接的 EvalPlanQual 处理
- 相同变化PostgreSQL 16.11 · 修复没有准备替代本地连接计划用于 EPQ 的外部或自定义连接的 EvalPlanQual 处理
- 相同变化PostgreSQL 15.15 · 修复没有准备替代本地连接计划用于 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)
改进如果某列带有标记为无效的非空约束,则禁止将其设置为 identity 列
变更
如果某列带有标记为无效的非空约束,则禁止将其设置为 identity 列(Jian He)§
identity 列必须是非空的,但先前的检查漏掉了这一边界情况。
改进避免并行清理中潜在的释放后使用问题
问题修复修复 pg_temp 中统计对象的可见性检查
变更
修复 pg_temp 中统计对象的可见性检查(Noah Misch)§
位于临时模式中的统计对象如果不加模式限定就无法命名,但 pg_statistics_obj_is_visible() 遗漏了这一点,可能无论如何都返回 “true”。反过来,像 pg_describe_object() 这样的函数可能无法按预期对对象名称进行模式限定。
问题修复修复 WAL 重放数据库创建过程中的轻微内存泄漏
变更
修复 WAL 重放数据库创建过程中的轻微内存泄漏(Nathan Bossart)§
问题修复修复 pg_stat_replication 视图中复制延迟的错误报告
变更
修复 pg_stat_replication 视图中复制延迟的错误报告(Fujii Masao)§
如果任何备库的重放 LSN 停止前进,write_lag 和 flush_lag 列最终将停止更新。
改进避免关于无效 primary_slot_name 设置的重复日志消息
变更
避免关于无效 primary_slot_name 设置的重复日志消息(Fujii Masao)§
改进当 synchronized_standby_slots 引用了不存在的复制槽时,避免发生故障
变更
当 synchronized_standby_slots 引用了不存在的复制槽时,避免发生故障(Shlok Kyal)§
改进在写入复制槽状态到磁盘失败后删除未完成的槽状态文件
变更
在写入复制槽状态到磁盘失败后删除未完成的槽状态文件(Michael Paquier)§
以前,磁盘空间不足等失败会留下一个临时 state.tmp 文件。这是有问题的,因为它会阻止所有后续写入状态的尝试,需要手动干预来清理。
问题修复修复逻辑复制并行应用工作进程中锁超时信号的错误处理
变更
修复逻辑复制并行应用工作进程中锁超时信号的错误处理(Hayato Kuroda)§
同一个信号编号被同时用于工作进程关闭和锁超时,导致混淆。
改进避免从流式传输切换到归档 WAL 源时不必要的 WAL 接收进程关闭
变更
避免从流式传输切换到归档 WAL 源时不必要的 WAL 接收进程关闭(Xuneng Zhou)§
在时间线切换期间,备库的 WAL 接收进程应保持活动状态,等待新的 WAL 流式传输起始点。相反,它反复关闭并立即重新启动,这可能会混淆状态监控代码。
问题修复修复 pgoutput 逻辑解码插件维护的关系同步缓存中的释放后使用问题
变更
修复 pgoutput 逻辑解码插件维护的关系同步缓存中的释放后使用问题(Vignesh C,Masahiko Sawada)§
逻辑解码期间的错误可能导致同一会话中后续逻辑解码尝试崩溃。此情况仅在通过 SQL 函数调用 pgoutput 时可以触发。
改进避免不必要地失效逻辑复制槽
改进在区域设置中恢复对 C 排序规则的特殊处理
变更
在区域设置中恢复对 C 排序规则的特殊处理(Jeff Davis)§
这修复了后端启动早期、尚未选择数据库之前访问共享系统目录时的一个回归问题。目前尚未发现这会影响 PostgreSQL 核心代码,但某些扩展已因此失效。
问题修复修复关于检查用户是否具有 Windows 管理员权限时失败消息的错误打印
变更
修复关于检查用户是否具有 Windows 管理员权限时失败消息的错误打印(Bryan Green)§
此代码本来会崩溃或至少打印乱码。但没有此类情况被报告过,这表明这些系统调用的失败极为罕见。
关联记录 (5)
问题修复避免在使用某些 libsanitizer 选项测试 PostgreSQL 时崩溃
变更
避免在使用某些 libsanitizer 选项测试 PostgreSQL 时崩溃(Emmanuel Sibi,Jacob Champion)§
问题修复修复 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 在 Windows 上 GSSAPI 逻辑中处理套接字相关错误的问题
变更
修复 libpq 在 Windows 上 GSSAPI 逻辑中处理套接字相关错误的问题(Ning Wu,Tom Lane)§
使用 GSSAPI 加密/解密传输数据的代码未能正确识别连接套接字上的错误条件,因为 Windows 报告这些错误的方式与其他平台不同。这导致在 Windows 上无法建立此类连接。
关联记录 (5)
- 相同变化PostgreSQL 17.7 · 修复 libpq 在 Windows 上 GSSAPI 逻辑中处理套接字相关错误的问题
- 相同变化PostgreSQL 16.11 · 修复 libpq 在 Windows 上 GSSAPI 逻辑中处理套接字相关错误的问题
- 相同变化PostgreSQL 15.15 · 修复 libpq 在 Windows 上 GSSAPI 逻辑中处理套接字相关错误的问题
- 相同变化PostgreSQL 14.20 · 修复 libpq 在 Windows 上 GSSAPI 逻辑中处理套接字相关错误的问题
- 相同变化PostgreSQL 13.23 · 修复 libpq 在 Windows 上 GSSAPI 逻辑中处理套接字相关错误的问题
问题修复修复继承表列上非继承而来的非空约束的转储问题
问题修复修复 pg_dump 对外键约束的排序
变更
修复 pg_dump 对外键约束的排序(Álvaro Herrera)§
确保这些数据库对象的顺序一致,如对其他对象类型所做的那样。
问题修复修复 pg_dump 和 pg_restore 中数据压缩逻辑的各种错误
问题修复修复 pgbench 以在启动 COPY 操作时妥善报告错误并退出
变更
修复 pgbench 以在启动 COPY 操作时妥善报告错误并退出(Anthonin Bonnefoy)§
pgbench 不打算支持这种情况,但之前会进入无限循环。
问题修复修复 pgbench 的多错误报告
变更
修复 pgbench 的多错误报告(Yugo Nagata)§
在连续两次 PQgetResult 调用都失败的情况下, pgbench 可能报告错误的错误消息。
问题修复在 pgbench 中,修复流水线模式下关于错误的错误断言
变更
在 pgbench 中,修复流水线模式下关于错误的错误断言(Yugo Nagata)§
问题修复修复 pg_combinebackup 中每个文件的内存泄漏
改进确保 contrib/pg_buffercache 函数可以被取消
变更
问题修复修复 contrib/pg_prewarm 对索引的权限检查
问题修复在 contrib/pg_stat_statements 中,避免当 SQL 语句文本中的两个或多个常量被标记为同一位置时发生崩溃
变更
在 contrib/pg_stat_statements 中,避免当 SQL 语句文本中的两个或多个常量被标记为同一位置时发生崩溃(Sami Imseih、Dmitry Dolgov)§
改进使 contrib/pgstattuple 更健壮地处理空页面或无效索引页面
变更
使 contrib/pgstattuple 更健壮地处理空页面或无效索引页面(Nitin Motiani)§
将全零页面计为空闲空间,并忽略根据页面特殊空间大小检查判定为无效的页面。B-树索引的代码已经将全零页面计为空闲空间,但 hash 和 gist 的代码会报告错误并退出,这被发现对用户不太友好。同样,使这三种情况在忽略损坏页面而非抛出错误方面保持一致。
关联记录 (5)
- 相同变化PostgreSQL 17.7 · 使 contrib/pgstattuple 更健壮地处理空页面或无效索引页面
- 相同变化PostgreSQL 16.11 · 使 contrib/pgstattuple 更健壮地处理空页面或无效索引页面
- 相同变化PostgreSQL 15.15 · 使 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 机器生成不正确的代码。添加显式编译器屏障来修复此问题。
问题修复修复 PGXS 构建基础设施以支持为扩展构建 NLS po 文件
变更
修复 PGXS 构建基础设施以支持为扩展构建 NLS po 文件(Ryo Matsumura)§
没有匹配的变化
尝试其他关键词,或 .
如何生成比较结果?
比较依据起始版本之后至目标版本的 PostgreSQL 发布说明。经核实的回补重复项会谨慎合并,保留每条原始说明;相关提交可能涉及独立变化,仍作为不同记录保留。
发布快照: 2026-09-26 · 安全快照: 2026-09-26
内容来自 PostgreSQL 发布说明。交互方式参考 pgversions.com 与 pgversionreport.