PostgreSQL 14.4 发布!

发布于 2022-06-16,PostgreSQL Global Development Group
PostgreSQL

PostgreSQL 全球开发组发布了 PostgreSQL 14.4,以修复使用 CREATE INDEX CONCURRENTLY (https://www.postgresql.org/docs/current/sql-createindex.html) 或 REINDEX CONCURRENTLY (https://www.postgresql.org/docs/current/sql-reindex.html) 命令时可能导致静默数据损坏的问题。请查看以下部分了解如何检测和修复索引中的静默数据损坏。

本版本还修复了自 2022 年 5 月 PostgreSQL 14.3 发布以来的 15 个以上 Bug。完整的变更列表请查看发布说明 (https://www.postgresql.org/docs/release/)。

此版本仅针对 PostgreSQL 14。PostgreSQL 全球开发组将于 2022 年 8 月 11 日为所有受支持的 PostgreSQL 版本(10 - 14)发布计划内的更新版本。

检测并修复 "CREATE INDEX CONCURRENTLY" / "REINDEX CONCURRENTLY" 导致的损坏

PostgreSQL 14.4 修复了 CREATE INDEX CONCURRENTLY (https://www.postgresql.org/docs/current/sql-createindex.html) 和 REINDEX CONCURRENTLY (https://www.postgresql.org/docs/current/sql-reindex.html) 中可能导致索引静默数据损坏的问题。在修复之前,CREATE INDEX CONCURRENTLYREINDEX CONCURRENTLY 可能会构建缺少条目的索引,导致使用该索引的 SELECT 查询找不到某些行。此问题可能并未损坏您的索引,但如果您不确定,我们建议您使用以下说明进行重建索引。

您可以使用 pg_amcheck (https://www.postgresql.org/docs/current/app-pgamcheck.html) 命令配合 --heapallindexed 标志来检测 B-tree 索引(默认索引类型)是否存在数据损坏。例如:

pg_amcheck --heapallindexed database

如果 pg_amcheck 检测到损坏,或者您在任何其他索引类型(例如 GiST、GIN 等)上运行了 CREATE INDEX CONCURRENTLYREINDEX CONCURRENTLY,请按照以下说明操作。

将系统升级到 PostgreSQL 14.4 后,您可以使用 REINDEX CONCURRENTLY 修复任何静默数据损坏。例如,如果您有一个名为 elephant_idx 的索引存在数据损坏,可以在 PostgreSQL 14.4 上运行以下命令修复:

REINDEX CONCURRENTLY elephant_idx;

您可以使用 reindexdb (https://www.postgresql.org/docs/current/app-reindexdb.html) 命令重建整个集群中的所有索引。reindexdb 还有一个 --jobs 标志,允许您并行运行重建索引操作。例如,要使用 <N> 个并行任务重建整个 PostgreSQL 集群的索引,可以运行以下命令:

reindexdb --all --concurrently --jobs <N>

Bug 修复与改进

本次更新修复了过去几个月报告的 15 个以上 Bug。以下列出的问题影响 PostgreSQL 14。

本次发布包含:

  • 对查询计划记忆化的多项修复。

  • 修复了当"全行变量"引用返回复合类型域的函数的结果时的查询问题。

  • 修复了使用引用 GROUPING 函数的子 SELECT 时出现的"variable not found in subplan target list"规划器错误。

  • 修复了当数据库编码为 SQL_ASCII 但客户端编码为多字节编码时 COPY FROM 中的错误检查。

  • 向事件触发器报告隐式创建的操作符族(由 CREATE OPERATOR CLASS 生成)。

  • 防止在逻辑复制大型事务期间在备库上触发 wal_receiver_timeout

  • 移除 libpq 中不正确的 TLS 私钥文件所有权检查。

  • 防止 pg_amcheck 在服务器连接丢失后崩溃。

完整的变更列表请查看发布说明 (https://www.postgresql.org/docs/release/)。

升级

所有 PostgreSQL 更新版本都是累积性的。与其他小版本更新一样,用户无需转储和重新加载数据库或使用 pg_upgrade 来应用此更新版本;只需关闭 PostgreSQL 并更新其二进制文件即可。

但是,如果您在 PostgreSQL 14 上运行了 CREATE INDEX CONCURRENTLY (https://www.postgresql.org/docs/current/sql-createindex.html) 或 REINDEX CONCURRENTLY (https://www.postgresql.org/docs/current/sql-reindex.html),则可能需要采取额外步骤。请查看"检测并修复 CREATE INDEX CONCURRENTLY / REINDEX CONCURRENTLY 导致的损坏"部分了解更多详情。

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

更多详情请查看发布说明 (https://www.postgresql.org/docs/release/)。

PostgreSQL 10 生命周期终止通知

PostgreSQL 10 将于 2022 年 11 月 10 日停止接收修复。如果您在生产环境中运行 PostgreSQL 10,建议您制定升级到更新的受支持 PostgreSQL 版本的计划。更多信息请参阅我们的版本策略 (https://www.postgresql.org/support/versioning/)。

相关链接

  • 下载 (https://www.postgresql.org/download/)

  • 发布说明 (https://www.postgresql.org/docs/release/)

  • 安全 (https://www.postgresql.org/support/security/)

  • 版本策略 (https://www.postgresql.org/support/versioning/)

  • 在 Twitter 上关注 @postgresql (https://twitter.com/postgresql)