受支持版本: 当前版本 (18)

E.4. 发布版本 18.1 #

发布日期:. 2025-11-13

本次发布包含来自 18.0 的多项修复。 有关 18 主版本新特性的说明,请参见 Section E.5

E.4.1. 迁移到版本 18.1 #

对于运行 18.X 的用户,不需要执行导出/恢复。

E.4.2. 变更 #

  • 检查 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) § §

  • 避免对带有分组集的无变量 HAVING 子句进行错误优化(Richard Guo) § §

  • 不要在哈希右半连接中使用并行(Richard Guo) §

    由于赛事条件,该案例在更新加盟共享散列表时无法可靠工作.

  • 在创建订单追加计划时避免可能逐零划分(理查德·郭) §

    这种错误可能导致错误选择最便宜的路径,或导致调试构建中的断言失败.

  • 用可以命令访问但不能只进行索引扫描的索引类型修复规划器失败( Maxime Schoemans) §

    这种疏忽导致了错误,比如: 没有返回仅用于索引扫描的数据。 。 。 案件不会出现任何核心指数类型,但有些扩展遇到了问题。

  • 移除 btree 索引清理中的错误断言(Peter Geoghegan) §

  • 避免可能发生意外或 无效的内存 Aloc 请求大小 并行GIN指数构建过程中的失败( Tomas Vondra) §

  • 确保 BRIN 自动汇总为需要快照的索引表达式提供快照 (Álvaro Herrera) § §

    以前,此类索引的自动汇总会失败,然后留下占位索引元组, 导致索引随时间膨胀。

  • 修复当表接近 232 页时 BRIN 索引扫描中的整数溢出风险 (Sunil S) §

    此疏忽可能导致无限循环或扫描不需要的表页面。

  • 修复 JIT 生成的元组解构代码中存储值的错误零扩展问题 (David Rowley) §

    不使用 JIT 时,等效代码执行的是符号扩展而非零扩展, 导致小整数数据类型的 Datum 表示不同。这种不一致在大多数情况下被掩盖了, 但已知在使用 Memoize 计划节点时会导致 could not find memoization table entry 错误,还可能存在其他症状。

  • 处理散列时修复罕见的崩溃 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 列必须是非空的,但先前的检查漏掉了这一边界情况。

  • 避免并行 vacuum 中潜在的 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_lagflush_lag 列最终将停止更新。

  • 避免关于无效 primary_slot_name 设置的重复日志消息 (Fujii Masao) §

  • synchronized_standby_slots 引用了不存在的复制槽时,避免发生故障(Shlok Kyal) §

  • 在写入复制槽状态到磁盘失败后删除未完成的槽状态文件 (Michael Paquier) §

    以前,磁盘空间不足等失败会留下一个临时 state.tmp 文件。 这是有问题的,因为它会阻止所有后续写入状态的尝试, 需要手动干预来清理。

  • 修复逻辑复制并行应用工作进程中锁超时信号的错误处理 (Hayato Kuroda) §

    同一个信号编号被同时用于工作进程关闭和锁超时,导致混淆。

  • 避免从流切换到归档 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 在 Windows 上 GSSAPI 逻辑中处理套接字相关错误的问题 (Ning Wu,Tom Lane) §

    使用 GSSAPI 加密/解密传输数据的代码未能正确识别连接套接字上的错误条件, 因为 Windows 报告这些错误的方式与其他平台不同。 这导致在 Windows 上无法建立此类连接。

  • 修复继承表列上非继承而来的非空约束的转储问题(Dilip Kumar) §

    从早于 v18 的服务器转储时,pg_dump 未能保留这类约束。

  • 修复 pg_dump 对外键约束的排序(Álvaro Herrera) §

    确保这些数据库对象的顺序一致,如对其他对象类型所做的那样。

  • 修复 pg_dumppg_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) §

    我们假设 __atomic_thread_fence() 是防止 C 编译器 在其周围重排内存访问的充分屏障,但似乎对于 Clang 来说并非如此, 导致它至少为 RISC-V、MIPS 和 LoongArch 机器生成不正确的代码。 添加显式编译器屏障来修复此问题。

  • 修复 PGXS 构建基础设施以支持为扩展构建 NLS po 文件(Ryo Matsumura) §

提交更正

如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。