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

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 的修复而引入的性能问题,该问题现在允许规划器在查询包含 leaky operator 时,使用子表上用户有权访问的列的统计信息。
  • 对分区表进行了几项其他修复和更改,包括不允许使用返回伪类型(如 RECORD)的分区键表达式。
  • 修复了逻辑复制订阅者执行按列 UPDATE 触发器的问题。
  • 修复了逻辑复制订阅者和发布者的多个崩溃和故障。
  • 使用 REPLICA IDENTITY FULL 提高了逻辑复制的效率。
  • 确保对物理复制槽调用 pg_replication_slot_advance() 会在重启后持久化更改。
  • 修复了 walsender 进程的几项问题。
  • 提高了具有非常大的内部关系的哈希连接的性能。
  • 修复了 EXPLAIN 输出中“Subplans Removed”字段的放置问题,将其与父 Append 或 MergeAppend 计划一起放置。
  • 修复了并行查询计划的几项问题。
  • 修复了查询计划器错误的几项问题,包括一个影响了单行子查询的连接问题。
  • 修复了 MCV 扩展统计信息的几项问题,包括一个关于 OR 子句估计不正确的修复。
  • 提高了具有多个核心的 CPU 上并行哈希连接的效率。
  • 在对临时表执行索引创建、删除或重索引时,忽略 CONCURRENTLY 选项。
  • 当并行 CREATE INDEX 没有可用的动态共享内存槽时,回退到非并行索引构建。
  • 修复了 GiST 和 GIN 索引的几项问题。
  • 修复了 BRIN 索引操作在使用 boxrangeinet 数据类型时可能发生的崩溃。
  • 修复了 BRIN 假设性索引的支持。
  • 修复了在使用 GENERATED 表达式中引用的列在同一 ALTER TABLE 语句中更早地添加或更改类型时,ALTER TABLE 发生的失败。
  • 修复了处理外表上多个 AFTER ROW 触发器的问题。
  • 修复了 EXTRACT(ISOYEAR FROM timestamp) 对于公元前日期的偏移量计算错误。
  • 防止 pg_hba.conf 文件中的 RADIUS 认证参数被意外小写和截断。
  • 修复了 GSSAPI 支持的几项问题,包括让 libpq 接受所有 GSS 相关连接参数,即使 GSSAPI 代码未编译。
  • 修复了并行模式下运行 pg_dumppg_restore 的几项问题。
  • 修复了在使用 postgres_fdw 尝试在远程服务器上执行远程查询(例如 UPDATE remote_tab SET (x,y) = (SELECT ...))时发生的崩溃。
  • 禁止在 contrib/tablefunccrosstab() 函数中使用 NULL 类别值,以防止崩溃。
  • 修复了 Windows 的几项问题,包括一个可能导致 NOTIFY 出现时序问题的竞争条件。
  • 修复了 ecpg 的几项问题。

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

更新

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

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

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

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

链接