PostgreSQL 全球开发组已发布 PostgreSQL 14.4 以修复使用时可能导致静默数据损坏的问题。
CREATE INDEX CONCURRENTLY或 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”查询不找到某些行。此问题可能没有损坏您的索引,但如果您不确定,我们建议您使用以下说明重新索引。
您可以检测 B-tree 索引(默认索引类型)是否存在数据损坏使用 pg_amcheck
带有 --heapallindexed 标志的命令。例如:
pg_amcheck --heapallindexed 数据库
如果 pg_amcheck 检测到损坏,或者如果您运行了 CREATE INDEX CONCURRENTLY 或
REINDEX CONCURRENTLY 在任何其他索引类型(例如 GiST、GIN 等)上,请请按照以下说明进行操作。
将系统升级到 PostgreSQL 14.4 后,您可以修复任何静默数据使用 REINDEX CONCURRENTLY 损坏。例如,如果您有一个名为elephant_idx 有数据损坏,可以运行以下命令
PostgreSQL 14.4 修复它:
同时重新索引大象_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
大交易的复制。 - 删除 libpq 中不正确的 TLS 私钥文件所有权检查。
- 防止在
pg_amcheck中服务器连接丢失后崩溃。
有关可用更改的完整列表,请查看
发行说明。
文章来源:https://mp.weixin.qq.com/s/XTSAF1hJiJ1vauWJRXY8OA




