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