pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
PostgreSQL 全球开发组已发布所有受支持版本的更新,包括 18.7、17.12、16.16、15.20 和 14.25,同时发布 PostgreSQL 19 的第二个候选发布版(RC2)。本次发布修复了 52 个安全漏洞和 140 多个缺陷,这些问题是在过去几个月中上报的。
部分修复需要在安装更新后采取额外措施,具体见下文“升级”一节。
完整变更列表请参阅发行说明。
这是 PostgreSQL 14 的最后一次发布。 PostgreSQL 14 现已结束维护,今后不再提供安全与缺陷修复。如果生产环境仍在使用 PostgreSQL 14,建议规划升级到较新的受支持版本。详情请参阅版本策略。
本次更新修复了以下安全漏洞。各链接提供漏洞详情及受影响版本信息:
本次更新修复了过去几个月中上报的 140 多个缺陷。以下问题影响 PostgreSQL 18,其中许多也影响其他受支持版本。
missing chunk number 错误的问题。遇到此问题的用户应在更新后重建索引,见“升级”一节。NOT NULL NO INHERIT 约束,包括 CREATE TABLE ... LIKE。此前,这种约束可能使分区包含本不应允许的 NULL 值。查找与修复方法见“升级”一节。bpchar 列禁用 B-tree 索引去重,此前可能导致仅索引扫描返回错误结果。此类列上的 B-tree 索引应在更新后重建,见“升级”一节。pg_control 文件,以及避免在备份期间被替换的文件(如 postgresql.auto.conf)产生截断或用零填充的副本。VACUUM FULL)可能丢失行的问题:受影响的行曾被随后中止的子事务更新。LATERAL 引用、外连接、继承表上的自连接消除、含集合返回函数的子查询中的 DISTINCT ON,以及使用非确定性排序规则的查询。RANGE 分区表仅按前导列过滤、使用 MINVALUE 或 MAXVALUE 边界的表中的 DEFAULT 分区,以及并发更新悄然跳过本应更新的行。WHEN NOT MATCHED BY SOURCE 在目标行被并发删除时的行为。此前可能错误执行 WHEN NOT MATCHED BY TARGET 动作,产生错误结果。JSON_TABLE 和 JSON_VALUE)可能返回错误结果的多项问题。psql 拒绝这种用法。FROM 子句使用 AT TIME ZONE 的视图和规则、名为 set 的目标别名,以及可能无法重新载入的 tsvector、tsquery 值。本次发布还将时区数据更新为 tzdata 2026f。自 2026 年 11 月起,加拿大西北地区(America/Inuvik)全年采用 UTC-06,曼尼托巴省(America/Winnipeg)全年采用 UTC-05。本次发布暂定二者的时区缩写分别为 CST 和 EST,后续仍可能调整。此外,古巴将在这个冬季继续采用夏令时;EST5EDT、CST6CDT、MST7MDT 和 PST8PDT 这些时区名称在处理历史时间戳时,现采用名称所示的 UTC 偏移,不再沿用相关城市时区的历史规则。
PostgreSQL 的小版本更新都是累积性的。与其他小版本更新一样,安装本次更新无需转储并重新载入数据库,也无需运行 pg_upgrade;停止 PostgreSQL、更新二进制文件后再启动即可。
如果怀疑 GIN 索引受到本次修复的损坏问题影响,应重建索引,例如:
REINDEX INDEX your_index_name;
如果使用 pg_trgm,应重建所有采用 gist_trgm_ops 运算符类的 GiST 索引。
如果读取表时遇到 missing chunk number 错误,应重建该表的索引;这也会重建其 TOAST 表的索引,例如:
REINDEX TABLE your_table_name;
如果使用增量备份,建议更新后重新做一次完整备份,作为后续增量备份的基础。
如果使用分区表,可用以下查询找出分区表上的 NOT NULL NO INHERIT 约束:
SELECT conrelid::regclass, conname
FROM pg_constraint
WHERE contype = 'n' AND connoinherit
AND conrelid IN (SELECT oid FROM pg_class WHERE relkind = 'p');
不需要的约束可用 ALTER TABLE ... DROP CONSTRAINT ... 删除。需要保留的约束应通过 ALTER TABLE ... ALTER CONSTRAINT ... INHERIT 修复;如果任一分区的对应列包含 NULL 值,该操作会失败。
如果在 bpchar 列(即声明为不带长度的 bpchar 的列)上建立了 B-tree 索引,应在更新后重建。声明为 char(n) 的列不受影响。
如果跳过了一个或多个小版本更新,可能还需要执行额外的更新后操作;详情请查看此前各版本的发行说明。
更多细节请参阅发行说明。
这是 PostgreSQL 19 的第二个候选发布版。作为候选发布版,PostgreSQL 19 RC2 与 PostgreSQL 19 首个正式版本将基本一致,但正式发布前仍可能加入一些修复。RC2 也包含本轮更新中适用于 PostgreSQL 19 的修复。
PostgreSQL 19 计划于 2026 年 11 月 19 日正式发布,详见下文“发布计划”。
从更早版本的 PostgreSQL 升级到 PostgreSQL 19 RC2,需要采用主版本升级方式,例如 pg_upgrade 或 pg_dump / pg_restore。更多信息请参阅升级文档。
如果使用 pg_upgrade,并且存在使用全文检索、pg_trgm 或 fuzzystrmatch 的索引,请阅读发行说明中的“迁移到版本 19”一节,升级后可能需要重建这些索引。
RC1 测试期间,PostgreSQL 19 修复了多项缺陷,包括:
pg_dump / pg_restore 和 pg_upgrade 将无法重建它们。NULL。first_value()、nth_value() 在 IGNORE NULLS 与某些 EXCLUDE 窗口帧选项组合使用时出现无限循环的问题。详细修复列表请参阅待解决事项页面中 RC2 前已解决的问题。
这是 PostgreSQL 19 的第二个候选发布版。如果没有发现需要延期或增加候选版本的问题,PostgreSQL 19 将于 2026 年 11 月 19 日正式发布。
更多信息请参阅 Beta 测试页面。
如果对本公告有更正或建议,请发往公开邮件列表 pgsql-www@lists.postgresql.org。