↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

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

发布于 2026-11-12,PostgreSQL Global Development Group
PostgreSQL 安全相关

PostgreSQL 全球开发组已发布所有受支持版本的更新,包括 18.7、17.12、16.16、15.20 和 14.25,同时发布 PostgreSQL 19 的第二个候选发布版(RC2)。本次发布修复了 52 个安全漏洞和 140 多个缺陷,这些问题是在过去几个月中上报的。

部分修复需要在安装更新后采取额外措施,具体见下文“升级”一节。

完整变更列表请参阅发行说明。

PostgreSQL 14 结束维护

这是 PostgreSQL 14 的最后一次发布。 PostgreSQL 14 现已结束维护,今后不再提供安全与缺陷修复。如果生产环境仍在使用 PostgreSQL 14,建议规划升级到较新的受支持版本。详情请参阅版本策略。

安全问题

本次更新修复了以下安全漏洞。各链接提供漏洞详情及受影响版本信息:

  • CVE-2026-6460:ALTER ... SET DATA TYPE 后的类型混淆可导致任意代码执行(CVSS v3.1:8.8)
  • CVE-2026-6467:扩展脚本的 schema 处理错误可导致任意 SQL 执行(CVSS v3.1:7.2)
  • CVE-2026-14661:dblink 和订阅可向任意文件追加内容(CVSS v3.1:8.1)
  • CVE-2026-16237:INSERT ... ON CONFLICT 可绕过自动可更新视图的 WHERE 条件(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 类型修饰符的释放后使用可导致任意代码执行(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 处理零长度词元时会越界读取(CVSS v3.1:4.3)
  • CVE-2026-116309:plperl 的 blessed 引用类型混淆可能导致任意代码执行(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 可被数据库所有者利用执行代码(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:未正确终止的 name 值可泄露服务器内存(CVSS v3.1:4.3)
  • CVE-2026-116322:认证前的取消请求可导致自旋锁未释放(CVSS v3.1:5.3)
  • CVE-2026-116323:pltcl 重入结果转换的释放后使用可导致任意代码执行(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:交换或取反运算符的结果类型混淆可导致任意代码执行(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:转换表游标的释放后使用可导致任意代码执行(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:展开记录的域检查存在释放后使用,可导致任意代码执行(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)

缺陷修复与改进

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

  • 修复在备库上导出、导入快照的问题。对备库运行并行 pg_dump 时发现了这一缺陷,它可能损坏转储输出和备库数据。更一般地说,导入备库快照的事务可能返回错误结果。
  • 修复多项可能导致 GIN 索引损坏的问题,损坏后查询可能遗漏行或返回无关行。如果怀疑 GIN 索引受到影响,应重建该索引。详情及更新后的操作步骤见发行说明和下文“升级”一节。
  • 修复 pg_trgm GiST 索引可能损坏、导致搜索遗漏匹配行的问题。更新后需要重建索引,见“升级”一节。
  • 修复对 TOAST 表执行 REINDEX CONCURRENTLY 后,后续索引更新可能被遗漏、导致 missing chunk number 错误的问题。遇到此问题的用户应在更新后重建索引,见“升级”一节。
  • 在所有场景下禁止为分区表设置 NOT NULL NO INHERIT 约束,包括 CREATE TABLE ... LIKE。此前,这种约束可能使分区包含本不应允许的 NULL 值。查找与修复方法见“升级”一节。
  • 对声明为不带长度的 bpchar 列禁用 B-tree 索引去重,此前可能导致仅索引扫描返回错误结果。此类列上的 B-tree 索引应在更新后重建,见“升级”一节。
  • 修复多项可能生成损坏的增量备份的问题。建议更新后重新做一次完整备份,作为后续增量备份的基础,见“升级”一节。
  • 修复多项基础备份问题,包括避免复制出撕裂的 pg_control 文件,以及避免在备份期间被替换的文件(如 postgresql.auto.conf)产生截断或用零填充的副本。
  • 重构规划器的连接消除实现。这对小版本更新而言改动较大,但有助于避免原实现持续产生缺陷。
  • 修复表重写(例如 CLUSTER 或 VACUUM FULL)可能丢失行的问题:受影响的行曾被随后中止的子事务更新。
  • 修复并行清理的 I/O 耗时报告。
  • 修复多项可能在崩溃后造成数据丢失或不一致的问题,包括在创建多事务或中止预备事务期间启动检查点。待决预备事务的状态文件现以原子方式写入,避免崩溃遗留无效文件而阻止服务器启动。
  • 修复规划器可能返回错误查询结果的多项问题,涉及 LATERAL 引用、外连接、继承表上的自连接消除、含集合返回函数的子查询中的 DISTINCT ON,以及使用非确定性排序规则的查询。
  • 修复分区裁剪可能遗漏行的多项问题,包括多列 RANGE 分区表仅按前导列过滤、使用 MINVALUE 或 MAXVALUE 边界的表中的 DEFAULT 分区,以及并发更新悄然跳过本应更新的行。
  • 修复 INSERT ... ON CONFLICT 在 SERIALIZABLE 隔离级别下未对冲突行获取谓词锁的问题。此前,本应因序列化错误而失败的并发更新可能成功。
  • 修复 MERGE 中的 WHEN NOT MATCHED BY SOURCE 在目标行被并发删除时的行为。此前可能错误执行 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 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 RC2

这是 PostgreSQL 19 的第二个候选发布版。作为候选发布版,PostgreSQL 19 RC2 与 PostgreSQL 19 首个正式版本将基本一致,但正式发布前仍可能加入一些修复。RC2 也包含本轮更新中适用于 PostgreSQL 19 的修复。

PostgreSQL 19 计划于 2026 年 11 月 19 日正式发布,详见下文“发布计划”。

升级到 PostgreSQL 19 RC2

从更早版本的 PostgreSQL 升级到 PostgreSQL 19 RC2,需要采用主版本升级方式,例如 pg_upgrade 或 pg_dump / pg_restore。更多信息请参阅升级文档。

如果使用 pg_upgrade,并且存在使用全文检索、pg_trgm 或 fuzzystrmatch 的索引,请阅读发行说明中的“迁移到版本 19”一节,升级后可能需要重建这些索引。

自 19 RC1 以来的变化

RC1 测试期间,PostgreSQL 19 修复了多项缺陷,包括:

  • 撤回一项变更:不再允许针对数组、复合类型和范围类型的 JSON_ARRAY() 与 JSON_OBJECT() 表达式用于表达式索引、生成列和分区键,因为相关索引可能变得过时。如果在测试 PostgreSQL 19 时创建过这类对象,需要在升级前删除或重新定义,否则 pg_dump / pg_restore 和 pg_upgrade 将无法重建它们。
  • 修复 GROUPING SETS 查询返回错误结果的问题:未包含在当前分组集中的列可能显示值,而非 NULL。
  • 修复 first_value()、nth_value() 在 IGNORE NULLS 与某些 EXCLUDE 窗口帧选项组合使用时出现无限循环的问题。
  • 修复提前聚合将连接条件中的易变函数按组执行一次、而非按行执行一次的问题。
  • 修复客户端停止读取、导致某会话阻塞于发送数据时,备库提升为主库可能无限等待的问题。
  • 修复会话在读取通知时被中断,可能使 LISTEN / NOTIFY 队列卡住的问题。
  • 修复引用列的类型需要转换才能与被引用列比较时,外键检查可能报错的问题。
  • 修复基于哈希的查询执行中的性能回退,包括根据规划器行数估计分配哈希表时,大小可能远超 work_mem 限制的问题。

详细修复列表请参阅待解决事项页面中 RC2 前已解决的问题。

发布计划

这是 PostgreSQL 19 的第二个候选发布版。如果没有发现需要延期或增加候选版本的问题,PostgreSQL 19 将于 2026 年 11 月 19 日正式发布。

更多信息请参阅 Beta 测试页面。

相关链接

如果对本公告有更正或建议,请发往公开邮件列表 pgsql-www@lists.postgresql.org。