发布日期:. 2025-11-13
本次发布包含来自 18.0 的多项修复。 有关 18 主版本新特性的说明,请参见 Section E.4。
对于运行 18.X 的用户,不需要执行导出/恢复。
在 CREATE STATISTICS 中检查模式上的 CREATE 权限(Jelte Fennema-Nio) §
这一遗漏使得表所有者可以在任意模式中创建统计信息,从而可能导致意外的命名冲突。
PostgreSQL 项目感谢 Jelte Fennema-Nio 报告此问题。 (CVE-2025-12817)
避免 libpq 中分配大小计算发生整数溢出(Jacob Champion) §
libpq 中有多处在计算内存分配所需大小时不够谨慎。足够大的输入可能导致整数溢出,进而使缓冲区分配过小,最终造成越界写入。
PostgreSQL 项目感谢 Positive Technologies 的 Aleksey Solovev 报告此问题。 (CVE-2025-12818)
防止当 JSON_VALUE 等 SQL/JSON 函数的 DEFAULT 子句包含 COLLATE 表达式时出现 “unrecognized node type” 错误(Jian He) § §
不要在哈希右半连接中使用并行(Richard Guo) §
由于赛事条件,该案例在更新加盟共享散列表时无法可靠工作.
在创建订单追加计划时避免可能逐零划分(理查德·郭) §
这种错误可能导致错误选择最便宜的路径,或导致调试构建中的断言失败.
用可以命令访问但不能只进行索引扫描的索引类型修复规划器失败( Maxime Schoemans) §
这种疏忽导致了错误,比如: “没有返回仅用于索引扫描的数据”。 。 。 案件不会出现任何核心指数类型,但有些扩展遇到了问题。
删除 btree 索引清理中的错误断言( Peter Geoghegan) §
避免可能发生意外或 “无效的内存 Aloc 请求大小” 并行GIN指数构建过程中的失败( Tomas Vondra) §
确保 BRIN 自动摘要化为需要的索引表达式提供快照( Álvaro Herrera) § §
此前,自动汇总会因为这种指数而失败,然后留下占位符指数拖累,导致指数随时间推移膨胀.
当表格包含近2个时, 在 BRIN 指数扫描中修正整数流过量危险32 pages (Sunil S) §
这种监督可能导致对不需要的表格页进行无限循环或扫描。
在 JIT 生成的 tuple 变形码( David Rowley) 中修复存储值的不正确的零扩展 §
在不使用JIT时,等效代码会做符号扩展而不是零扩展,导致小整数数据类型的Datum代表不同. 在大多数情况下,这种不一致是被掩盖的,但众所周知,这会导致 “找不到纪念表条目” 使用 Memoize 计划节点时出错,可能还有其他症状.
处理散列时修复罕见的崩溃 GROUPING SETS queries (David Rowley) §
在散列加盟中修复错误的散列表大小选择逻辑(Tomas Vondra) §
Hash加入有时会使用比预期更多的内存,或者未能以高效的方式进行分割.
改进统计操纵函数中的关系查询逻辑(Nathan Bossart) § §
修复 pg_restore_relation_stats()、 pg_clear_relation_stats()、 pg_restore_attribute_stats() 和 pg_clear_attribute_stats(),使其在获取目标关系锁之前而不是之后检查权限。
修复缓存触发器结果关系信息时的错误逻辑(David Rowley、Amit Langote) §
如果分区的列集合在物理上与其父分区表的列集合并不完全相同,这一疏漏可能导致崩溃。
修复在分区表上执行 EvalPlanQual 重新检查期间发生的崩溃(David Rowley、Amit Langote) §
修复对未为 EPQ 准备本地替代连接计划的外部或自定义连接的 EvalPlanQual 处理(Masahiko Sawada、Etsuro Fujita) §
在这种情况下,本应正常调用外部或自定义访问方法,但实际上并没有,通常会导致崩溃。
避免在 DETACH CONCURRENTLY 期间重复复制哈希分区约束(Haiyang Li) §
ALTER TABLE DETACH PARTITION CONCURRENTLY 先前会向已分离的分区中添加一份分区约束的副本。这一做法并不合适,一方面是因为非并发的 DETACH 并不会这样做,更主要的是在哈希分区场景下,该约束表达式包含对父表 OID 的引用。这会在转储/恢复时造成问题,或者在 DETACH 之后父表被删除时出问题。在 v19 及以后版本中,我们将不再生成任何这样的复制约束。对于已发布分支,为尽量降低意外后果的风险,仅在用于哈希分区时跳过添加这种复制约束。
不允许在分区键中使用生成列(Jian He、Ashutosh Bapat) §
这本来就不被允许,但检查漏掉了一些情况,例如列引用被隐含在整行引用中的场景。
不允许在 COPY ... FROM ... WHERE 子句中使用生成列(Peter Eisentraut、Jian He) §
以前,尝试引用这类列会导致错误行为或含糊的错误消息,因为在执行 WHERE 过滤时,生成列的值尚未计算出来。
如果某列带有标记为无效的非空约束,则禁止将其设置为 identity 列(Jian He) §
identity 列必须是非空的,但先前的检查漏掉了这一边界情况。
避免并行清理中的潜在 use-after-free 问题(Kevin Oommen Anish) §
这个缺陷在标准构建中似乎不会产生后果,但从理论上讲存在风险。
修复 pg_temp 中统计对象的可见性检查(Noah Misch) §
位于临时模式中的统计对象如果不带模式限定名就无法命名,但 pg_statistics_obj_is_visible() 漏掉了这一点,仍可能返回 “true”。进而,像 pg_describe_object() 这样的函数可能无法按预期为对象名添加模式限定。
修复 WAL 重放数据库创建期间的小型内存泄漏(Nathan Bossart) §
修复 pg_stat_replication 视图中复制滞后的错误报告(Fujii Masao) §
如果任一备库的重放 LSN 停止推进,write_lag 和 flush_lag 列最终也会停止更新。
避免针对无效 primary_slot_name 设置重复输出日志消息(Fujii Masao) §
避免在 synchronized_standby_slots 引用不存在的复制槽时发生失败(Shlok Kyal) §
在无法将复制槽状态写入磁盘后删除未完成的槽状态文件(Michael Paquier) §
以前,磁盘空间耗尽等故障会遗留一个临时的 state.tmp 文件。这会造成问题,因为它会阻止之后所有写入复制槽状态的尝试,并需要人工介入清理。
修复逻辑复制并行 apply 工作进程对锁超时信号处理不当的问题(Hayato Kuroda) §
同一个信号编号同时被用于工作进程关闭和锁超时,导致了混淆。
避免在从流式 WAL 源切换到归档 WAL 源时不必要地关闭 WAL 接收器(Xuneng Zhou) §
在时间线切换期间,备库的 WAL 接收器本应保持存活,等待新的 WAL 流起点。先前它会反复关闭并立即重启,这可能会让状态监控代码发生混淆。
修复 pgoutput 逻辑解码插件维护的关系同步缓存中的释放后使用问题(Vignesh C、Masahiko Sawada) §
逻辑解码期间出现错误后,可能导致同一会话中后续的逻辑解码尝试发生崩溃。只有在通过 SQL 函数调用 pgoutput 时才会触发这种情况。
避免逻辑复制槽被不必要地标记为无效(Bertrand Drouvot) §
在 locale 设置中重新建立对 C 排序规则的特殊处理(Jeff Davis) §
这修复了后端启动早期、尚未选择数据库之前访问共享系统目录时的一个回退问题。目前尚不清楚它会影响任何核心 PostgreSQL 代码,但有些扩展已经因此损坏。
修复在检查用户是否具有 Windows 管理员权限失败时错误消息打印不正确的问题(Bryan Green) §
这段代码本来可能会崩溃,或者至少打印出乱码。不过目前没有收到此类案例报告,这表明这些系统调用失败的情况极其罕见。
避免在使用某些 libsanitizer 选项测试 PostgreSQL 时发生崩溃(Emmanuel Sibi、Jacob Champion) §
在调试中以64位Windows(David Rowley)为基础修复错误的内存文本检查警告 §
正确处理 PL/pgSQL 赋值语句中的 GROUP BY DISTINCT(Tom Lane) §
解析器在这一上下文中没有记录 DISTINCT 选项,因此命令的行为会像普通的 GROUP BY 一样。
避免在 PL/Python 内部处理 SQL 错误时泄漏内存(Tom Lane) §
这修复了前几个小版本中引入的一个会话生命周期内存泄漏。
修复 libpq 在其 GSSAPI 逻辑中处理 Windows 上套接字相关错误的问题(Ning Wu、Tom Lane) §
用 GSSAPI 对传输数据进行加解密的代码,未能正确识别连接套接字上的错误条件,因为 Windows 报告这些错误的方式与其他平台不同。这导致在 Windows 上无法建立此类连接。
修复继承表列上非继承的非空约束的转储问题(Dilip Kumar) §
从 v18 之前的服务器执行转储时,pg_dump 无法保留这些约束。
修复 pg_dump 对外键约束的排序(Álvaro Herrera) §
确保这些数据库对象的顺序一致,如对其他对象类型所做的那样。
修复 pg_dump 和 pg_restore 中数据压缩逻辑的各种错误(Daniel Gustafsson、Tom Lane) § § §
多处地方缺少错误检查或检查不正确,而且在大端硬件上还存在可移植性问题。之所以一直没发现这些问题,是因为这段代码只用于在目录格式转储中读取被压缩的 TOC 文件;pg_dump 自身从不会生成这种转储。只有在事后手工压缩 TOC 文件时才会走到这种情况,这虽然是受支持的做法,但非常少见。
修复 pgbench 在开始 COPY 操作时若出现错误不能正常退出的问题(Anthonin Bonnefoy) §
pgbench 并不打算支持这种情况,但此前会陷入无限循环。
修复 pgbench 对多个错误的报告(Yugo Nagata) §
如果连续两次调用 PQgetResult 都失败,pgbench 可能会报告不正确的错误消息。
修复 pgbench 中关于管道模式错误的错误断言(Yugo Nagata) §
修复每个文件的内存泄漏 pg_combinebackup (Tom Lane) §
确保 contrib/pg_buffercache 的函数可以被取消(Satyanarayana Narlapuram、Yuhang Qiu) § §
某些代码路径可能长时间运行而不检查中断。
修复 contrib/pg_prewarm 对索引的权限检查(Ayush Vatsa、Nathan Bossart) § §
pg_prewarm() 需要对待预热的关系具有 SELECT 权限。然而索引本身没有 SQL 权限,因此先前会导致非超级用户无法预热索引。现在改为检查索引所属表上的 SELECT 权限。
在 contrib/pg_stat_statements 中,避免当 SQL 语句文本中的两个或多个常量被标记为同一位置时发生崩溃(Sami Imseih、Dmitry Dolgov) §
增强 contrib/pgstattuple 对空索引页或无效索引页的健壮性(Nitin Motiani) §
将全零页计为空闲空间,并根据对页面特殊空间大小的检查忽略无效页面。btree 索引的代码原本已经把全零页视为空闲,但 hash 和 GiST 的代码会直接报错,这被证明对用户很不友好。现在这三种情况都统一为忽略损坏页面,而不是抛出错误。
硬化我们的读写屏障宏以满足Clang(Thomas Munro) §
We supposed that __atomic_thread_fence() 足以阻止C编译器重排周围的内存访问,但似乎对Clang来说并非如此,允许它至少为RISC-V,MIPS,和LoongArch机器生成不正确的代码. 添加明确的编译屏障来修复它.
修复 PGXS 构建支持 NLS 构建的基础设施 po 扩展名的文件 (松村良子) §