2025年9月25日: PostgreSQL 18 发布!

PostgreSQL 14.3、13.7、12.11、11.16 和 10.21 发布!

发布于 2022-05-12,作者:PostgreSQL Global Development Group
PostgreSQL 项目 安全

PostgreSQL 全球开发组发布了对所有受支持版本的 PostgreSQL 的更新,包括 14.3、13.7、12.11、11.16 和 10.21。此次发布修复了一个安全漏洞,并解决了过去三个月报告的 50 多个错误。

我们鼓励您尽快安装此更新。

如果您在使用了 ltree 数据类型的列上存在任何 GiST 索引,在升级后您将需要 重新索引 它们。

有关更改的完整列表,请参阅 发行说明

PostgreSQL 10 结束生命周期通知

PostgreSQL 10 将于 2022 年 11 月 10 日停止接收修复。如果您在生产环境中使用 PostgreSQL 10,我们建议您计划升级到更新的、受支持的 PostgreSQL 版本。有关更多信息,请参阅我们的 版本策略

安全问题

CVE-2022-1552:Autovacuum、REINDEX 和其他命令省略“安全限制操作”沙箱。

受影响版本:10 - 14。安全团队通常不测试不受支持的版本,但此问题已经存在很久了。

当特权用户维护其他用户的对象时,Autovacuum、REINDEXCREATE INDEXREFRESH MATERIALIZED VIEWCLUSTERpg_amcheck 在安全运行方面所做的努力并不完整。这些命令过晚或根本没有激活相关的保护措施。拥有至少在一个模式中创建非临时对象的权限的攻击者,可以以超级用户的身份执行任意 SQL 函数。

虽然及时更新 PostgreSQL 对大多数用户来说是最佳的修复措施,但无法这样做的用户可以通过禁用 autovacuum、不手动运行上述命令以及不从 pg_dump 命令的输出中恢复来规避此漏洞。在此规避措施下,性能可能会迅速下降。VACUUM 是安全的,当受信任的用户拥有目标对象时,所有命令都正常。

PostgreSQL 项目感谢 Alexander Lakhin 报告此问题。

错误修复和改进

此次更新修复了过去几个月报告的 50 多个错误。以下列出的问题影响 PostgreSQL 14。其中一些问题也可能影响 PostgreSQL 的其他受支持版本。

包含在此发布版本中

  • 修复了可能导致 ltree 列上的 GiST 索引损坏的问题。升级后,您将需要 重新索引 任何在 ltree 列上的 GiST 索引。
  • 现在,在 SELECT 列表的顶层之外的整个行变量(例如 tbl.*)生成的元组中的列名,始终与相关的命名复合类型(如果存在)的列名相关联。如果您依赖于之前的行为,请参阅 发布说明 中的解决方法。
  • 修复了从 interval 类型提取 epoch 值时出现的错误舍入。
  • 防止调用 pg_stat_get_replication_slot(NULL) 时出现问题。
  • 修复了 table_to_xmlschema()timestamptztimetz 类型的输出错误。
  • 修复了影响异步远程查询的规划器问题相关的错误。
  • 修复了使用 SEARCHCYCLE 功能的查询包含重复的公共表表达式(WITH)名称时出现的规划器故障。
  • 修复了 ALTER FUNCTION 以支持在同一命令中更改函数的并行属性及其 SET 变量列表。
  • 修复了在使用 CLUSTER 对表达式作为前导键的索引进行操作时,表行排序不正确的问题。
  • 防止在已排序的 GiST 索引构建后不久发生系统崩溃时出现数据丢失。
  • 修复了在删除分区索引时发生死锁的风险。
  • 修复了 DROP TABLESPACE 和检查点之间的竞争条件,该条件可能导致未能从表空间目录中删除所有死文件。
  • 修复了在与检查点重叠的 TRUNCATE 命令之后,崩溃恢复中可能出现的问题。
  • 重新允许将 _ 作为自定义配置参数名称的第一个字符。
  • 在存在缺失 WAL 续订记录的情况下,修复了待机服务器提升时出现的 PANIC: xlog flush request is not satisfied 故障。
  • 修复了热备冲突处理中发生自死锁的可能性。
  • 确保在服务器接近 max_sync_workers_per_subscription 限制时,逻辑复制应用工作进程可以重新启动。
  • 禁止在 PL/Perl 函数编译期间执行 SPI 函数。
  • libpq 现在接受由 root 用户拥有的 SSL 私钥文件,这与服务器自 9.6 版本以来的规则一致。
  • 重新允许在 psqlpg_dumppg_amcheck 中使用 database.schema.table 模式。
  • pageinspect 进行多项修复,以提高整体稳定性。
  • 当外部表存在 BEFORE INSERT ... FOR EACH ROW 触发器时,在 postgres_fdw 中禁用批量插入。
  • 更新 JIT 代码以与 LLVM 14 兼容。

此次更新还包含了 tzdata 版本 2022a,用于巴勒斯坦的 DST 法律变更,以及智利和乌克兰的历史修正。

有关所有更改的完整列表,请参阅 发布说明

更新

所有 PostgreSQL 更新版本都是累积的。与其他次要版本一样,用户不需要转储和重新加载数据库或使用 pg_upgrade 来应用此更新版本;您可以直接关闭 PostgreSQL 并更新其二进制文件。

但是,如果您在使用了 ltree 数据类型的列上存在任何 GiST 索引,在升级后您将需要 重新索引 它们。

跳过了一个或多个更新版本的用户可能需要执行额外的、更新后的步骤;有关详细信息,请参阅早期版本的发布说明。

有关更多详细信息,请参阅 发行说明

链接