質問: PostgreSQLを使っているのですが、まれにインデックスが破損したと見られる現象が発生します。 一部のデータ、というか、一部のキー値を指定した場合のみデータの読み込みに失敗(ブロックのデータが読み込めなかった、という旨のエラー)したり、WHERE句で指定していないデータが返ってきたりすることがあります。 いずれも、REINDEXで直りました。 しかし、REINDEXで直るとは言っても、特に後者のようなケース(エラーではなく、誤った結果を得るケース)は非常に危険ですので、再発防止策を考えなければなりません。 そもそもなぜインデックスが破損するのでしょうか? 例えば、トランザクションの実行中にアプリケーションが停止し、コミットもロールバックもされなかったとして、データとインデックスが中途半端なことになる、そんなことは起きますか? つまり、DB側ではなく、それを利用するアプリケーション側の問題が原因となる可能性はあるのでしょうか?
回答: アプリケーション側が原因となる可能性は低く、原因として一番考えられるのはストレージだと思います。