Newshot
Account

PostgreSQL 18.7、17.12、16.16、15.20、14.25 及 19 RC 2 发布

Translation(model translation, not the source's own text)

快速链接

  • 功能矩阵
  • 赞助财务服务器的赞助商
  • 参与贡献
  • 即将举行的活动 过去的活动

PostgreSQL 18.7、17.12、16.16、15.20、14.25 和 19 RC 2 发布!

PostgreSQL 全球开发组已发布所有受支持 PostgreSQL 版本的更新,包括 18.7、17.12、16.16、15.20 和 14.25,以及 PostgreSQL 19 的第二个候选版本。本次发布修复了 52 个安全漏洞以及过去几个月报告的 140 多个缺陷。

有几个问题可能需要你在更新后采取额外步骤,下文将详细说明。关于更新后可能需要采取的步骤,请参阅“更新”一节。

如需完整的变更列表,请查看发布说明。

PostgreSQL 14 EOL 通知

这是 PostgreSQL 14 的最后一个版本。PostgreSQL 14 现已终止支持(end-of-life),将不再接收安全与缺陷修复。如果你在生产环境中运行 PostgreSQL 14,我们建议你制定计划,升级到更新的、受支持的 PostgreSQL 版本。更多信息请参阅我们的版本策略。

安全问题

本次更新发布修复了以下安全漏洞。你可以在下面的链接中找到有关这些漏洞及其受影响版本的更多细节:

  • CVE-2026-6460:ALTER ... SET DATA TYPE 执行任意代码后的类型混淆(CVSS v3.1:8.8)
  • CVE-2026-6467:扩展脚本模式处理不当导致执行任意 SQL(CVSS v3.1:7.2)
  • CVE-2026-14661:dblink 和订阅可向任意文件追加内容(CVSS v3.1:8.1)
  • CVE-2026-16237:尽管存在可自动更新的视图 WHERE 条件,INSERT ... ON CONFLICT 仍可读取或修改行(CVSS v3.1:5.4)
  • CVE-2026-16240:pg_basebackup 可将备份清单内容用作格式字符串(CVSS v3.1:3.7)
  • CVE-2026-18447:输出参数类型混淆导致执行任意代码(CVSS v3.1:8.8)
  • CVE-2026-116303:外键和 JSON 转换绕过转换函数的 EXECUTE 权限(CVSS v3.1:3.1)
  • CVE-2026-116304:并行 RECORD typmod 释放后使用导致执行任意代码(CVSS v3.1:8.8)
  • CVE-2026-116306:字段赋值期间复合类型变更导致执行任意代码(CVSS v3.1:8.8)
  • CVE-2026-116307:plperl 预编译查询释放后使用导致执行任意代码(CVSS v3.1:8.8)
  • CVE-2026-116308:dict_int 读取超出零长度 token 的范围(CVSS v3.1:4.3)
  • CVE-2026-116309:plperl 受祝福引用(blessed-reference)类型混淆可能执行任意代码(CVSS v3.1:8.8)
  • CVE-2026-116310:COPY 错误上下文使用已释放的字段存储(CVSS v3.1:4.3)
  • CVE-2026-116311:DROP OWNED 可从非所属表移除限制性行安全策略(CVSS v3.1:5.4)
  • CVE-2026-116312:MERGE 可能将错误的行放入触发器转换表(CVSS v3.1:5.4)
  • CVE-2026-116313:vacuumdb --missing-stats-only 允许数据库所有者以 vacuumdb 用户身份执行代码(CVSS v3.1:7.2)
  • CVE-2026-116314:由于缺少非纯文本归档校验,pg_restore 执行任意代码(CVSS v3.1:8.8)
  • CVE-2026-116315:tsvector_delete() 堆缓冲区溢出导致执行任意代码(CVSS v3.1:8.8)
  • CVE-2026-116316:受安全限制的操作可在 pg_temp 中创建类型,随后该会话的查询会找到它们(CVSS v3.1:8.8)
  • CVE-2026-116317:ts_rank_cd() 堆缓冲区溢出可能执行任意代码(CVSS v3.1:8.8)
  • CVE-2026-116318:pg_dump 非空约束名称允许 SQL 注入(CVSS v3.1:8.8)
  • CVE-2026-116319:plperl 可重入 return_next() 释放后使用导致执行任意代码(CVSS v3.1:8.8)
  • CVE-2026-116320:plperl 数组和哈希转换释放后使用导致执行任意代码(CVSS v3.1:8.8)
  • CVE-2026-116321:未终止的名称值泄露服务器内存(CVSS v3.1:4.3)
  • CVE-2026-116322:预认证取消请求可泄露自旋锁(CVSS v3.1:5.3)

文章标题:PostgreSQL 18.7、17.12、16.16、15.20、14.25 和 19 RC 2 发布

正文:

  • CVE-2026-116323:pltcl 可重入结果转换的释放后使用(use-after-free)可执行任意代码(CVSS v3.1:8.8)
  • CVE-2026-116325:reindexdb 索引名引用允许 SQL 注入(CVSS v3.1:8)
  • CVE-2026-116326:plperl 绑定对象异常遵循过期的 sigjmp_buf(CVSS v3.1:8.8)
  • CVE-2026-116327:security_barrier 分析可通过间接表达式泄露隐藏值(CVSS v3.1:4.3)
  • CVE-2026-116328:Generation 内存上下文整数回绕可执行任意代码(CVSS v3.1:8.8)
  • CVE-2026-116329:统计信息导入类型混淆可执行任意代码(CVSS v3.1:8.8)
  • CVE-2026-116330:pg_dump 的 tar restore.sql 未能阻止 psql 命令注入(CVSS v3.1:8.8)
  • CVE-2026-116331:Min/max 聚合类型混淆可执行任意代码(CVSS v3.1:8.8)
  • CVE-2026-116332:Portal 设置的释放后使用可执行任意代码(CVSS v3.1:8.8)
  • CVE-2026-116333:并行 B-tree 数组扫描读取超出数组边界(CVSS v3.1:6.5)
  • CVE-2026-116335:Commutator 或 negator 结果类型混淆可执行任意代码(CVSS v3.1:8.8)
  • CVE-2026-116336:REINDEX CONCURRENTLY 在索引函数期间不阻止 DROP INDEX(CVSS v3.1:8.8)
  • CVE-2026-120139:元组大小整数回绕可执行任意代码(CVSS v3.1:8.8)
  • CVE-2026-120141:物化集合返回函数类型混淆可执行任意代码(CVSS v3.1:8.8)
  • CVE-2026-120142:被删除列的类型混淆可执行任意代码(CVSS v3.1:8.8)
  • CVE-2026-120143:Transition-table 游标的释放后使用可执行任意代码(CVSS v3.1:8.8)
  • CVE-2026-120144:类型缓存失效缺口可执行任意代码(CVSS v3.1:8.8)
  • CVE-2026-120145:逻辑复制可写入订阅者系统目录,从而执行任意代码(CVSS v3.1:8.8)
  • CVE-2026-120146:REASSIGN OWNED 绕过角色 SET 和 CREATEDB 检查(CVSS v3.1:4.3)
  • CVE-2026-120147:dblink 可重入断开连接的释放后使用可执行任意代码(CVSS v3.1:8.8)
  • CVE-2026-120148:扩展统计伪类型混淆可执行任意代码(CVSS v3.1:8.1)
  • CVE-2026-120149:FDW 批量插入不匹配可执行任意代码(CVSS v3.1:8.8)
  • CVE-2026-120150:Expanded-record 域检查的释放后使用可执行任意代码(CVSS v3.1:8.8)
  • CVE-2026-120151:plpgsql 记录字段类型混淆可执行任意代码(CVSS v3.1:8.8)
  • CVE-2026-120152:pg_show_all_settings() 的释放后使用泄露内存(CVSS v3.1:4.3)
  • CVE-2026-120153:扩展脚本替换允许通过对象名进行 SQL 注入(CVSS v3.1:7.2)
  • CVE-2026-120154:INSERT ... ON CONFLICT 可在行安全策略下读取行(CVSS v3.1:4.3)

Bug 修复与改进

本次更新修复了过去几个月报告的超过 140 个缺陷。下列问题影响 PostgreSQL 18。其中许多问题也影响其他受支持的 PostgreSQL 版本。

  • 修复在备服务器上导出和导入快照的问题。该问题在对备服务器运行并行 pg_dump 时被发现,可能同时损坏转储输出和备服务器的数据。更一般地说,导入在备服务器上拍摄的快照的事务可能返回错误结果。
  • 若干 GIN 索引修复,此前可能导致索引损坏,使查询漏掉行或返回不相关的行。如果你怀疑某个 GIN 索引受到影响,应重新索引它。有关该问题的更多细节,请参阅发布说明;有关更新后的步骤,请参阅“Updating”部分。
  • 修复 pg_trgm GiST 索引中可能的索引损坏,该损坏可能导致搜索漏掉匹配行。更新后需要重新索引;请参阅“Updating”部分。
  • 修复一种情况:在用 REINDEX CONCURRENTLY 重建 TOAST 表上的索引后,后续索引更新可能被遗漏,导致 missing chunk number 错误。如果你遇到过此问题,更新后需要重新索引。请参阅“Updating”部分。
  • 在所有情况下禁止在分区表上使用 NOT NULL NO INHERIT 约束,包括 CREATE TABLE ... LIKE。此前,这可能导致分区在其不应包含 NULL 值时包含 NULL 值。有关如何查找并修复受影响的约束,请参见“更新”部分。
  • 对声明为不带长度的 bpchar 的列禁用 B-tree 索引去重,因为这可能导致仅索引扫描返回错误结果。如果 bpchar 列上有 B-tree 索引,应在更新后重建这些索引。参见“更新”部分。
  • 修复了增量备份中可能导致备份损坏的若干问题。建议在更新后进行一次新的完整备份,并将其用于后续增量备份。参见“更新”部分。
  • 修复了基础备份中的若干问题,包括避免 pg_control 文件出现撕裂副本,以及避免在备份运行期间被替换的文件(如 postgresql.auto.conf)出现截断或零填充副本。
  • 重写规划器的连接消除实现。虽然对于更新版本来说这是一项重大变更,但这样做是为了避免先前实现持续产生缺陷。
  • 修复在表重写(例如 CLUSTER 或 VACUUM FULL)期间,当某行已被后来中止的子事务更新时可能发生的行丢失。
  • 修复并行 vacuum I/O 计时报告。
  • 修复了崩溃后可能导致数据丢失或不一致的若干问题,包括在创建 multixact 或中止预备事务时启动检查点。此版本还会以原子方式写入待处理预备事务的状态文件,因为此前崩溃可能留下无效文件,导致服务器无法启动。
  • 修复规划器中可能导致查询结果错误的若干问题,包括带有 LATERAL 引用的查询、外连接、使用继承的表上的自连接消除、带有集合返回函数的子查询中的 DISTINCT ON,以及使用非确定性排序规则的查询。
  • 修复分区裁剪中可能导致漏掉行的若干问题,包括当查询仅过滤前导列时的多列 RANGE 分区表、使用 MINVALUE 或 MAXVALUE 边界的表上的 DEFAULT 分区,以及可能静默跳过应更新行的并发更新。
  • 修复 INSERT ... ON CONFLICT 在 SERIALIZABLE 隔离级别下对冲突行获取谓词锁的问题。此前,本应以序列化错误失败的并发更新可能成功。
  • 修复当目标行被并发删除时带有 WHEN NOT MATCHED BY SOURCE 的 MERGE。此前,可能会改为执行 WHEN NOT MATCHED BY TARGET 动作,从而产生错误结果。
  • 修复 SQL/JSON 函数(如 JSON_TABLE 和 JSON_VALUE)中可能返回错误结果的若干问题。
  • 修复逻辑复制中可能导致订阅者错误应用更改的若干问题。
  • 修复备用服务器的若干问题,包括在某些情况下避免不必要的重放延迟和查询取消。
  • 修复 psql 以接受单个命令字符串中的多个 COPY ... FROM STDIN 命令。针对 CVE-2026-6464 的修复导致 psql 拒绝这些命令。
  • 修复了可能导致转储无法恢复,或导致恢复后的视图行为与原始视图不同的若干问题。这些问题包括在 FROM 子句中使用 AT TIME ZONE 或目标别名名为 set 的视图和规则,以及可能无法重新加载的 tsvector 和 tsquery 值。
  • 修复当服务器在崩溃后重启期间启动进程崩溃时,服务器卡住而不是退出的问题。

本次发布还将时区数据文件更新至 tzdata release 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 RC 2 的说明

本次发布标志着 PostgreSQL 19 的第二个候选版本。作为候选版本,PostgreSQL 19 RC 2 将与 PostgreSQL 19 的初始发布基本一致,不过在 PostgreSQL 19 正式发布之前可能会应用更多修复。PostgreSQL 19 RC 2 还包含本次更新发布中适用于 PostgreSQL 19 的修复。

PostgreSQL 19 正式发布的计划日期是 2026 年 11 月 19 日。更多详情,请参见“发布计划”部分。

升级到 PostgreSQL 19 RC 2

要从较早版本的 PostgreSQL 升级到 PostgreSQL 19 RC 2,你需要使用大版本升级策略,例如 pg_upgrade 或 pg_dump / pg_restore。更多信息,请访问升级相关的文档部分:

https://www.postgresql.org/docs/19/upgrading.html

如果你使用 pg_upgrade,并且有使用全文检索、pg_trgm 或 fuzzystrmatch 的索引,请查看发行说明中的“迁移到版本 19”部分,因为升级后你可能需要重建它们。

自 19 RC 1 以来的变更

在 RC 1 期间,PostgreSQL 19 应用了若干缺陷修复。这些包括:

  • 回退一项更改,该更改曾允许针对数组、复合类型和范围类型的 JSON_ARRAY() 和 JSON_OBJECT() 表达式用于表达式索引、生成列和分区键,因为这些索引可能会过时。如果你在测试 PostgreSQL 19 时创建了任何此类对象,需要在升级前删除或重新定义它们,因为 pg_dump / pg_restore 和 pg_upgrade 将无法重新创建它们。

PostgreSQL 18.7、17.12、16.16、15.20、14.25 和 19 RC 2 发布

  • 修复 GROUPING SETS 查询中的错误结果:当前分组集中未包含的列可能显示为某个值,而不是 NULL。
  • 修复 first_value() 和 nth_value() 在使用 IGNORE NULLS 搭配某些 EXCLUDE 帧选项时出现的无限循环。
  • 修复 eager aggregation 在连接条件中执行 volatile 函数时,按每个分组执行一次而不是按每行执行一次的问题。
  • 修复当某个会话因向已停止读取的客户端发送数据而被阻塞时,standby server 的提升会无限期等待的问题。
  • 修复如果某个会话在读取通知时被中断,LISTEN / NOTIFY 队列会卡住的问题。
  • 修复外键检查在引用列的类型需要转换才能与被引用列比较时,可能因错误而失败的问题。
  • 修复基于哈希的查询执行中的性能回归,包括哈希表可能根据规划器的行估计被设置为远远超过 work_mem 限制的大小。

有关修复的详细列表,请访问 open items 页面。

发布计划

这是 PostgreSQL 19 的第二个候选版本。除非发现需要延迟或增加一个候选版本的问题,否则 PostgreSQL 19 应于 2026 年 11 月 19 日正式发布。

更多信息请参阅 Beta Testing 页面。

链接

  • 发行说明
  • 版本策略
  • Beta Testing 信息
  • PostgreSQL 19 Beta 发行说明
  • PostgreSQL 19 未解决问题
  • 提交 Bug

如果您对本发布公告有更正或建议,请发送至 [email protected] 公共邮件列表。

The translation is machine-generated and individual terms may be off. Nothing is rewritten or cut; the original is authoritative.

Published by Hacker News
This site only summarises and aggregates; copyright stays with the original author. Headlines and summaries follow the source — where they differ, the original wins.
Read the original ↗