我正在尝试同时创建一个索引。
CREATE INDEX CONCURRENTLY blocks_expr_idx6 ON blocks USING btree ('blah') WHERE "type" = 'user root';
Run Code Online (Sandbox Code Playgroud)
运行查询 12 小时后,如果我运行\d blocks
Postgres 报告索引无效:
"blocks_expr_idx6" btree ('blah') WHERE "type" = 'user root' INVALID
Run Code Online (Sandbox Code Playgroud)
文档说:
如果在扫描表时出现问题,例如死锁或唯一索引中的唯一性违规,CREATE INDEX 命令将失败,但会留下“无效”索引。出于查询目的,该索引将被忽略,因为它可能不完整;但是它仍然会消耗更新开销。psql \d 命令将报告这样的索引为 INVALID。
在这种情况下推荐的恢复方法是删除索引并再次尝试执行 CREATE INDEX CONCURRENTLY。(另一种可能性是使用 REINDEX 重建索引。但是,由于 REINDEX 不支持并发构建,因此该选项似乎不太吸引人。)
我怎样才能弄清楚为什么Postgres 将索引标记为 INVALID?
归档时间: |
|
查看次数: |
3726 次 |
最近记录: |