2015-11-19 3 views
3

Сегодня я столкнулся с ситуацией, когда в результате запроса отсутствовала запись, когда она существовала в таблице. Я проследил проблему, возможно, с поврежденным индексом. После того, как я сделал REINDEX, проблема была решена.Обнаружение и исправление поврежденных индексов в Postgresql?

Дело в том, что обычно, когда я запускаю отчеты, я получаю более 10000 записей. Мне невозможно узнать, отсутствуют ли записи. Сегодня мне посчастливилось найти проблему.

Есть ли способ получить уведомление, когда индекс поврежден?

Если нет, то как мне написать функцию, которая будет REINDEX все дефиниции в моей схеме?

+0

Какая ** точная ** версия Postgres вы работаете? –

+0

Я запускаю postgresql 9.3 – avi

+0

Это не точная ** версия **. Есть 10 различных релизов для 9.3. Что делает 'select version()' дать вам? –

ответ

1

Индекс коррупции - очень плохая проблема. Я думаю, вам нужно диагностировать и исправить это по существу, а не пытаться использовать его в своем запросе. Это может быть вызвано плохими административными действиями, такими как kill -9 любого из Postgres процессов и т. Д.

На ваш вопрос: нет инструмента для проверки AFAIK. Я считаю, что запрос, который сканирует весь индекс, например. сортировка по индексу найдет поврежденные страницы в индексе.

Я рекомендую вам прочитать this blog.

+0

Как написать такой запрос? Дело в том, что при запуске запроса я получаю результаты. Кажется, что проблема с записью не была проиндексирована должным образом, а не была там, а затем потеряна ... Это была новая запись ... – avi

+0

спросите своего администратора базы данных почини это. Шутки в сторону... – aviad

Смежные вопросы