Индекс поврежден после восстановления базы данных PostgreSQL
Мы используем 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%';
Решение состоит в том, чтобы переиндексировать поврежденные индексы. После переиндексации первый запрос также возвращает ожидаемый результат.
Кто-нибудь встречал такую же проблему раньше? У кого-нибудь есть идеи по поводу первопричины?