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