PostgreSQLでデータが破損していたのでREINDEXを実行

目次

概要

PostgreSQLのデータベースを利用したWebアプリケーションにおいて、なぜかデータにアクセスできなくなりました。

今回、この問題をREINDEXにより解決しました。

この問題解決までの過程をここに書きたいと思います。

環境

  • PostgreSQL 12.4

問題発覚

今回、WebアプリケーションでPostgreSQLを利用している際に、特定のページにアクセスできなくなってしまったことから問題が発覚しました。

データベースとのコネクションの問題化と思って、再起動をしたりしてみたのですが、問題は解決しませんでした。

また、特定のページだけエラーが発生したため一部のデータの破損を疑ったのですが、データベースにアクセスしてそのデータを取得するクエリを実行すると、ちゃんとデータの取得ができました。

問題解明

クエリからデータの取得をやってみたのですが、Webアプリケーションでは、実行したクエリとは微妙に異なるクエリを実行していました。そこで、Webアプリケーションと同じクエリを実行してみると、データの取得に失敗しました。

データの取得に失敗したクエリでは、インデックス(INDEX)を利用したクエリとなっていました。つまり、インデックスに不整合があるという可能性が高くなりました。

問題解決

PostgreSQLでは、インデックスを再作成することができます。

そこで、PostgreSQL上で次のコマンドを実行して、インデックスの再作成(REINDEX)をしました。

REINDEX DATABASE データベース名

テーブル単位で実行することもできますが、他のところにも不整合があるかもしれないため、データベース単位で実行しました。

私の場合、これで問題が解決しました。

さいごに

データベースの管理は面倒だということが今回のことから分かりました。