我们使用WAL-E备份和还原PostgreSQL数据库(版本9.5.13),发现还原后一些索引(不是全部)被破坏了,其中大多数与String类型字段相关。
例如,使用分析解释,我们可以看到以下查询命中了与 foo_name 字段相关的现有索引,但没有行返回。
select * from foo where foo_name = 'xyz';
如果我们在查询中使用like,它可以返回预期的行,因为它执行了全表扫描。
select * from foo where foo_name like '%xyz%';
解决方案是重新索引损坏的索引。重新索引它后,第一个查询还会返回预期结果。
有人以前遇到过同样的问题吗?有人对根本原因有任何想法吗?