CREATE INDEX CONCURRENTLY PostgreSQL 全球开发组已发布 PostgreSQL 14.4 以修复在使用或REINDEX CONCURRENTLY 命令时可能导致静默数据损坏的问题 。有关如何检测和纠正索引中的静默数据损坏的信息,请参阅以下部分。
自 PostgreSQL 14.3 于 5 月发布以来,此版本还修复了超过 15 个错误。有关更改的完整列表,请查看 发行说明。
此版本仅适用于 PostgreSQL 14。PostgreSQL 全球开发组将在 2022 年 8 月 11 日为所有受支持的 PostgreSQL 版本(10 - 14)发布计划的更新版本。
检测并修复“CREATE INDEX CONCURRENTLY”/“REINDEX CONCURRENTLY”损坏
PostgreSQL 14.4 修复了一个 可能导致索引无提示数据损坏的问题CREATE INDEX CONCURRENTLY 。REINDEX CONCURRENTLY在修复之前, CREATE INDEX CONCURRENTLY可能REINDEX CONCURRENTLY会构建缺少条目的索引,从而导致SELECT使用该索引的查询找不到某些行。此问题可能没有损坏您的索引,但如果您不确定,我们建议您使用以下说明重新索引。
您可以使用带有标志的pg_amcheck 命令检测 B 树索引(默认索引类型)是否存在数据损坏。--heapallindexed例如:
pg_amcheck --heapallindexed database
如果pg_amcheck检测到损坏或者如果您运行CREATE INDEX CONCURRENTLY或 REINDEX CONCURRENTLY在任何其他索引类型(例如 GiST、GIN 等)上运行,请按照以下说明进行操作。
将系统升级到 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。
包含在此版本中:
- 查询计划记忆的几个修复。
- 修复“整行变量”引用返回复合类型域的函数结果的查询。
SELECT使用函数中引用的子修复“子计划目标列表中未找到变量”计划错误GROUPING。- 修复
COPY FROM当数据库编码是SQL_ASCII但客户端编码是多字节编码时的错误检查。 - 将隐式创建的运算符族(由 生成
CREATE OPERATOR CLASS)报告给事件触发器。 wal_receiver_timeout防止在大型事务的逻辑复制期间触发备用数据库。- 删除 libpq 中不正确的 TLS 私钥文件所有权检查。
- 防止服务器连接丢失后崩溃
pg_amcheck。
有关可用更改的完整列表,请查看 发行说明。
更新
所有 PostgreSQL 更新版本都是累积的。与其他次要版本一样,用户无需转储和重新加载其数据库或使用pg_upgrade即可应用此更新版本;您可以简单地关闭 PostgreSQL 并更新其二进制文件。
但是,如果您在 PostgreSQL 14 上运行CREATE INDEX CONCURRENTLY ,REINDEX CONCURRENTLY 您可能需要采取额外的步骤。请查看“检测和修复CREATE INDEX CONCURRENTLY/REINDEX CONCURRENTLY损坏”部分了解更多详细信息。
跳过一个或多个更新版本的用户可能需要运行额外的更新后步骤;有关详细信息,请参阅早期版本的发行说明。
有关详细信息,请参阅 发行说明。
文章来源:https://www.postgresql.org/about/news/postgresql-144-released-2470/




