PostgreSQL 12.2、11.7、10.12、9.6.17、9.5.21 和 9.4.26 发布!

发布于 2020-02-13,作者:PostgreSQL 全球开发组
PostgreSQL 项目 安全

PostgreSQL 全球开发组发布了我们数据库系统所有受支持版本的更新,包括 12.2、11.7、10.12、9.6.17、9.5.21 和 9.4.26。此版本修复了 PostgreSQL 服务器中发现的一个安全问题以及过去三个月报告的 75 多个错误。

用户应尽快计划更新。

PostgreSQL 9.4 现在已 EOL

这是 PostgreSQL 9.4 的最后一个版本,它将不再接收安全更新和错误修复。PostgreSQL 9.4 引入了新功能,例如 JSONB 支持、ALTER SYSTEM 命令、将逻辑更改流式传输到输出插件的功能,以及更多

虽然我们对这个版本感到非常自豪,但这些功能在较新版本的 PostgreSQL 中也可以找到。许多这些功能也得到了改进,并且根据我们的版本控制策略,现在是时候停用 PostgreSQL 9.4 了。

为了获得持续的支持,我们建议您计划升级到较新的、受支持的 PostgreSQL 版本。请参阅 PostgreSQL 版本控制策略以获取更多信息。

安全问题

  • CVE-2020-1720:ALTER ... DEPENDS ON EXTENSION 缺少授权检查。

受影响的版本:9.6 - 12

ALTER ... DEPENDS ON EXTENSION 子命令不执行授权检查,这可能允许非特权用户在某些条件下删除任何函数、过程、物化视图、索引或触发器。如果管理员安装了扩展,并且非特权用户可以 CREATE,或者扩展所有者以可预测的方式执行 DROP EXTENSION 或被说服执行 DROP EXTENSION,则可能发生此攻击。

PostgreSQL 项目感谢 Tom Lane 报告此问题。

错误修复和改进

此更新还修复了过去几个月报告的 75 多个错误。其中一些问题仅影响 12 版本,但也可能影响所有受支持的版本。

其中一些修复包括:

  • 修复了带有外键引用的分区表的问题,其中 TRUNCATE ... CASCADE 不会删除所有数据。如果您以前在带有外键引用的分区表上使用过 TRUNCATE ... CASCADE,请参阅“更新”部分以了解验证和清理步骤。
  • 修复了无法向带有子分区(也称为多级分区表)的表添加外键约束的问题。如果您以前使用过此功能,可以通过分离并重新附加受影响的分区,或通过删除并重新将外键约束添加到父表来修复它。您可以在ALTER TABLE 文档中找到有关如何执行这些步骤的更多信息。
  • 修复了由 CVE-2017-7484 的修复引入的分区表的性能问题,该修复现在允许规划器在查询包含泄漏运算符时使用用户被授予父表访问权限的列的子表上的统计信息。
  • 对分区表的其他一些修复和更改,包括不允许返回伪类型(如 RECORD)的分区键表达式。
  • 修复了逻辑复制订阅者执行每列 UPDATE 触发器的问题。
  • 修复了逻辑复制订阅者和发布者的多个崩溃和故障问题。
  • 使用 REPLICA IDENTITY FULL 提高逻辑复制的效率。
  • 确保在物理复制槽上调用 pg_replication_slot_advance() 会在重启后保留更改。
  • 对 walsender 进程的一些修复。
  • 提高具有非常大的内部关系的哈希连接的性能。
  • 通过将其放置在其父 Append 或 MergeAppend 计划中,修复了 EXPLAIN 输出中“Subplans Removed”字段的位置。
  • 对并行查询计划的一些修复。
  • 对查询规划器错误的一些修复,包括一个影响与单行子查询连接的错误。
  • 对 MCV 扩展统计信息的一些修复,包括对 OR 子句的不正确估计的修复。
  • 提高具有多个核心的 CPU 上并行哈希连接的效率。
  • 在临时表上执行索引创建、删除或重建索引时,忽略 CONCURRENTLY 选项。
  • 当并行 CREATE INDEX 没有空闲的动态共享内存槽时,回退到非并行索引构建。
  • 对 GiST 和 GIN 索引的一些修复。
  • 修复了在 boxrangeinet 数据类型中使用 BRIN 索引操作时可能发生的崩溃。
  • 修复了对 BRIN 假设索引的支持。
  • 修复了在同一个 ALTER TABLE 语句中,当 GENERATED 表达式中引用的列在之前添加或更改类型时 ALTER TABLE 中发生的故障。
  • 修复了外表中多个 AFTER ROW 触发器的处理。
  • 修复了 BC 日期 EXTRACT(ISOYEAR FROM timestamp) 结果的偏差。
  • 防止在 pg_hba.conf 文件中不必要地将 RADIUS 身份验证参数转换为小写并截断。
  • 对 GSSAPI 支持的一些修复,包括让 libpq 接受所有与 GSS 相关的连接参数,即使 GSSAPI 代码没有编译到其中。
  • 在并行模式下运行时,对 pg_dumppg_restore 的一些修复。
  • 修复了当尝试在远程服务器上执行远程查询时,例如 UPDATE remote_tab SET (x,y) = (SELECT ...)postgres_fdw 发生的崩溃。
  • 为了防止崩溃,禁止 contrib/tablefunccrosstab() 函数中的 NULL 类别值。
  • 对 Windows 的一些修复,包括可能导致 NOTIFY 出现定时异常的竞争条件。
  • 一些 ecpg 修复。

有关可用更改的完整列表,请查看发行说明

更新

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

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

如果您之前在分区表的子分区上执行过 TRUNCATE ... CASCADE,并且该分区表具有来自另一个表的外键引用,您可能需要在另一个表上执行 TRUNCATE,或者如果您在运行 TRUNCATE ... CASCADE 后添加了行,则需要执行 DELETE。导致此问题的错误已在此版本中修复,但您必须执行此步骤以确保所有数据都已清理。

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

链接