PostgreSQL 全球开发小组发布了 PostgreSQL 14.4,以修复一个在使用 CREATE INDEX CONCURRENTLY
或 REINDEX CONCURRENTLY
命令时可能导致静默数据损坏的问题。请参阅以下部分,了解如何检测和纠正索引中静默数据损坏的信息。
此版本还修复了自 5 月份发布 PostgreSQL 14.3 以来的 15 多个错误。有关更改的完整列表,请查看发行说明。
此版本仅适用于 PostgreSQL 14。PostgreSQL 全球开发小组将于 2022 年 8 月 11 日对所有受支持的 PostgreSQL 版本(10 - 14)进行计划的更新发布。
PostgreSQL 14.4 修复了 CREATE INDEX CONCURRENTLY
和 REINDEX CONCURRENTLY
中的一个问题,该问题可能导致索引的静默数据损坏。在修复之前,CREATE INDEX CONCURRENTLY
和 REINDEX CONCURRENTLY
可能会构建具有缺失条目的索引,导致使用该索引的 SELECT
查询找不到某些行。此问题可能未损坏您的索引,但如果您不确定,我们建议您按照以下说明重新索引。
您可以使用带有 --heapallindexed
标志的 pg_amcheck
命令检测 B 树索引(默认索引类型)是否存在数据损坏。例如:
pg_amcheck --heapallindexed database
如果 pg_amcheck
检测到损坏,或者您在任何其他索引类型(例如 GiST、GIN 等)上运行了 CREATE INDEX CONCURRENTLY
或 REINDEX CONCURRENTLY
,请按照以下说明操作。
将您的系统升级到 PostgreSQL 14.4 后,您可以使用 REINDEX CONCURRENTLY
修复任何静默数据损坏。例如,如果您有一个名为 elephant_idx
的索引存在数据损坏,您可以在 PostgreSQL 14.4 上运行以下命令来修复它:
REINDEX CONCURRENTLY elephant_idx;
您可以使用 reindexdb
命令重新索引整个集群中的所有索引。reindexdb
还有一个 --jobs
标志,允许您并行运行重新索引操作。例如,要使用 <N>
个并行作业重新索引整个 PostgreSQL 集群,您可以运行以下命令:
reindexdb --all --concurrently --jobs <N>
此更新修复了过去几个月报告的 15 多个错误。以下列出的问题会影响 PostgreSQL 14。
此版本包含
GROUPING
函数中引用的子 SELECT
时出现的“子计划目标列表中找不到变量”规划器错误。SQL_ASCII
但客户端编码为多字节编码时,COPY FROM
中的错误检查。CREATE OPERATOR CLASS
生成)。wal_receiver_timeout
。pg_amcheck
中服务器连接丢失后崩溃。有关可用更改的完整列表,请查看发行说明。
所有 PostgreSQL 更新版本都是累积的。与其他次要版本一样,用户不需要转储和重新加载数据库或使用 pg_upgrade
来应用此更新版本;您可以简单地关闭 PostgreSQL 并更新其二进制文件。
但是,如果您在 PostgreSQL 14 上运行了 CREATE INDEX CONCURRENTLY
或 REINDEX CONCURRENTLY
,您可能需要采取其他步骤。请查看“检测和修复 CREATE INDEX CONCURRENTLY
/ REINDEX CONCURRENTLY
损坏”部分以获取更多详细信息。
跳过一个或多个更新版本的用户可能需要运行其他更新后步骤;请参阅早期版本的发行说明以获取详细信息。
有关更多详细信息,请参阅发行说明。
PostgreSQL 10 将于 2022 年 11 月 10 日停止接收修复。如果您在生产环境中运行 PostgreSQL 10,我们建议您制定计划升级到更新、受支持的 PostgreSQL 版本。有关更多信息,请参阅我们的版本控制策略。