E.3. 发布版本 13.21 #
发布日期:. 2025-05-08
本次发布包含来自 13.20 的多项修复。有关 13 主版本新特性的说明,请参见第 E.24 节。
PostgreSQL 社区将于 2025 年 11 月停止发布 13.X 系列的更新。建议用户尽快升级到较新的发布分支。
E.3.1. 迁移到版本 13.21
对于运行 13.X 的用户,不需要执行导出/恢复。
但是,如果分区表上存在自引用外键约束,可能需要重新创建这些约束,以确保它们得到正确执行。请参见下面的第二个变更日志条目。
此外,如果是从早于 13.17 的版本升级,请参见第 E.7 节。
E.3.2. 变更
避免在检查声称为 GB18030 编码的无效编码字符串时发生单字节缓冲区越界读取(Noah Misch,Andres Freund)§ §
虽然可能性不大,但如果不完整的多字节字符出现在内存末尾,可能会导致 SIGSEGV 崩溃。这在服务器和使用 libpq 的应用程序中都可能发生。(CVE-2025-4207)
正确处理分区表上的自引用外键(Álvaro Herrera)§
创建或附加分区时未能为外键约束创建所需的目录条目,如果该约束引用的表就是同一个分区表。这会导致该约束无法被完全执行。
要修复此问题,如果在约束创建之后曾创建或附加过分区,则应删除并重新创建分区表上的任何自引用外键。请注意,可能已经存在违反约束的行,在这种情况下重新创建约束会失败,你需要先修复这些行后再重试。
修复在
UPDATE、DELETE和MERGE查询中使用对视图或函数的整行表引用(在FROM中)时出现的意外“attribute has wrong type”错误(Tom Lane)§ § §正确处理出现在附加到
INSERT/UPDATE/DELETE/MERGE命令(该命令本身在WITH内部)的WITH子句中对外部 CTE 名称的引用(Tom Lane)§解析器未能检测到不允许的递归情况,也未能在将 CTE 排列为可用顺序时考虑此类引用。
修复
ARRAY(和subquery)ARRAY[构造,使其在输入类型为expression, ...]int2vector或oidvector时产生合理的结果(Tom Lane)§此补丁恢复了 PostgreSQL 9.5 之前的行为:结果类型为
int2vector[]或oidvector[]。修复解析 Ispell 字典时可能错误报告无效词缀的问题(Jacob Brazeal)§
修复
ALTER TABLE ADD COLUMN以正确处理具有默认值的域类型的情况(Jian He,Tom Lane,Tender Wang)§ §如果域类型具有默认值,在不带显式
DEFAULT子句的情况下添加该类型的列,未能在现有行中安装域的默认值,而是将新列保留为空值。改进对不允许的外键约束属性修改尝试的错误消息(Álvaro Herrera)§
避免在重置标记为
ON COMMIT DELETE ROWS的临时表的relhassubclass标志时出错(Noah Misch)§禁用位图堆扫描中的“跳过获取”优化(Matthias van de Meent)§
事实证明,当并发 vacuum 将页面标记为全部可见时,此优化可能会返回死元组。
修复存在大量搜索键时 GIN 索引搜索启动的性能问题(Tom Lane,Vinod Sridharan)§ §
具有大量键的可索引子句(例如,
jsonbcol ?| array[...]包含数万个数组元素)启动时需要 O(N2) 的时间,并且在此期间也无法被取消。检测 BRIN 索引操作符类中缺失的支持函数,并报告错误而不是崩溃(Álvaro Herrera)§
修复启动后立即处理
synchronous_standby_names时的竞态条件(Melnikov Maksim,Michael Paquier)§在系统启动后的短暂时间内,即使
synchronous_standby_names已启用,后端可能也不会等待同步提交。修复
pg_strtof()在空 endptr 时崩溃的问题(Alexander Lakhin,Tom Lane)§避免在 Snowball 词干提取器遇到内存不足条件时崩溃(Maksim Korotkov)§
在归档恢复期间跳过 WAL 回收和预分配,以避免损坏从归档恢复的 WAL 文件(Noah Misch,Arun Thirupathi)§ § § § § § §
此变更回移了 v15 时代的修复,当时被认为大致是修饰性的,但事实证明能防止后续修复引起的数据损坏。
防止在逻辑解码的“快进”模式中过度推进 catalog xmin(Zhijie Hou)§
这个错误可能导致已删除的目录条目被清理掉,即使 WAL 读取进程仍可能需要它们。
避免在不需要强锁的 DDL 操作影响正在进行逻辑复制的表时丢失数据(Shlok Kyal,Hayato Kuroda)§ §
DDL 命令导致的目录变更未被反映到 WAL 解码进程中,使其可能使用过期的目录数据解码后续变更,很可能导致数据损坏。
修复
gistFindCorrectParent()中过于严格的断言(Heikki Linnakangas)§在 PL/pgSQL 中,避免当可滚动游标定义在简单
SELECT查询上时出现“unexpected plan node type”错误(Andrei Lepikhov)§expression在 pg_dump 的
--clean模式中不再尝试删除单个索引分区(Jian He)§服务器会拒绝这样的
DROP命令。这实际上没有什么影响,因为这些分区在后续对其父表或分区索引执行DROP时会被自动删除。但是,尝试删除时报告的错误会在以--single-transaction模式恢复时造成问题。在 pg_dumpall 中,避免在
pg_auth_members包含无效角色 OID 时生成无效的角色GRANT命令(Tom Lane)§改为打印警告并跳过该条目。这能更好地处理在后端分支中因
GRANT和DROP ROLE之间的竞态条件而导致的目录损坏。允许
contrib/dblink查询被查询取消中断(Noah Misch)§ §此变更回移了 v17 时代的修复。它防止了由于未能检测到死锁而导致
CREATE DATABASE和DROP DATABASE可能挂起的问题。避免在
contrib/pageinspect的heap_page_items()中因损坏的输入数据而崩溃(Dmitry Kovalenko)§防止
contrib/pg_freespacemap的pg_freespacemap()中的断言失败(Tender Wang)§对没有存储的关系(如视图)应用
pg_freespacemap()会导致断言失败,尽管在非断言构建中没有不良影响。增加了错误检查以拒绝这种情况。修复在 macOS 15.4 上的构建失败(Tom Lane,Peter Eisentraut)§
此 macOS 更新破坏了我们对
strchrnul()的配置探测。更新时区数据文件至 tzdata 2025b 版本,包含智利的夏令时法律变更以及伊朗的历史修正(Tom Lane)§
新增时区 America/Coyhaique 用于智利的 Aysén 大区,以反映其改为全年使用 UTC-03,从而与 America/Santiago 产生差异。