PostgreSQL 全球开发组将于 2022 年 6 月 16 日发布 PostgreSQL 14 的更新。此更新修复了 PostgreSQL 14 所有版本中可能导致索引静默损坏的问题。
自 PostgreSQL 14.0 发布以来,CREATE INDEX CONCURRENTLY (https://www.postgresql.org/docs/current/sql-createindex.html) 和 REINDEX CONCURRENTLY (https://www.postgresql.org/docs/current/sql-reindex.html) 存在一个可能导致索引静默数据损坏的问题。此问题将在即将发布的 PostgreSQL 14.4 中修复。
如果您在 14.4 之前的任何 PostgreSQL 14 版本上运行了这两个命令中的任何一个,您可能已经遇到了静默数据损坏。您可以使用 pg_amcheck (https://www.postgresql.org/docs/current/app-pgamcheck.html) 命令配合 --heapallindexed 标志来检测 B-tree 索引的此问题。
如果您需要在 PostgreSQL 14.4 发布之前立即修复此问题,可以运行不带 CONCURRENTLY 的 CREATE INDEX 或 REINDEX。您也可以运行 reindexdb (https://www.postgresql.org/docs/current/app-reindexdb.html) 命令并使用 --jobs 标志增加并行度,但不要使用 --concurrently 标志。
一旦 PostgreSQL 14.4 发布,您就可以安全地使用 CREATE INDEX CONCURRENTLY 和 REINDEX CONCURRENTLY 来管理索引,以及在 reindexdb 上使用 --concurrently 标志。
如有其他问题,您可以通过支持 (https://www.postgresql.org/support/) 渠道与 PostgreSQL 社区成员交流。