通常,重放 WAL 日志就足以再数据库崩溃之后恢复 GiST 索引的完整性。不过,还存在一些边角的情况,这些时候索引状态无法完整地重建。这时候索引从作用上仍然是正确的,但是可能会导致一些性能的降低。在发生这种情况的时候,索引可以通过 VACUUM 其所有表来修复,或者通过使用 REINDEX 重建索引来修复。在某些情况下,单纯的 VACUUM 是不够的,需要 VACUUM FULL 或 REINDEX 。是否需要这些步骤,可以从崩溃恢复的日志信息中得到提示:
LOG: index NNN/NNN/NNN needs VACUUM or REINDEX to finish crash recovery
或者在索引插入的时候出现下面的日志信息:
LOG: index "FOO" needs VACUUM or REINDEX to finish crash recovery
如果一个单纯的 VACUUM 觉得自己无法完整地恢复,它会返回一个提示:
NOTICE: index "FOO" needs VACUUM FULL or REINDEX to finish crash recovery