これはPGroonga 2.X and 3.X用のドキュメントです。古いPGroongaを使っているならPGroonga 1.xのドキュメントを見てください。
pgroonga_database_remove
関数2.1.8で追加。
pgroonga_database_remove
関数はPostgreSQLのデータベースディレクトリー内のPGroonga関連のすべてのファイル(pgrn*
ファイル)を削除します。
この関数を使うにはpgroonga_database
モジュールをインストールする必要があります。
この関数は危険な関数です。この関数が必要になるまでこの関数を有効にしないでください。
通常、PGroonga関連のファイルを削除する必要はありません。もしPGroongaのインデックスが破損した場合は、REINDEX
で復旧できます。しかし、PGroonga内部のデータベースが壊れたときはREINDEX
では復旧できません。
PGroongaの内部データベースが壊れたときに復旧する手順は次の通りです。
PostgreSQLへの接続をすべて切断する
PostgreSQLのデータディレクトリーにあるすべてのpgrn*
ファイルを削除する
もし、テーブルスペースを使っているならテーブルスペースのディレクトリー内にあるpgrn*
ファイルも削除します。
PostgreSQLが動いているホストにログインする必要があります。
PostgreSQLに接続する
すべてのPGroongaのインデックスに対してREINDEX
を実行する
これでPGroongaの内部データベースが作られ、PostgreSQL内のデータを使ってすべてのPGroongaのインデックスが再作成されます。
pgroonga_database_remove
関数はすべてのpgrn*
ファイルを削除します。この関数はテーブルスペースにも対応しています。
pgroonga_database_remove
関数を使うとPostgreSQLが動いているホストにログインする必要はありません。pgroonga_database_remove
関数を使った復旧手順は次の通りです。
PostgreSQLへの接続をすべて切断する
PostgreSQLに接続する
SELECT pgroonga_database_remove()
を実行する
すべてのPGroongaのインデックスに対してREINDEX
を実行する
これでPGroongaの内部データベースが作られ、PostgreSQL内のデータを使ってすべてのPGroongaのインデックスが再作成されます。
この関数の構文は次の通りです。
bool pgroonga_database_remove()
この関数は常にtrue
を返します。なぜなら、もし問題があった場合はfalse
を返すのではなくエラーにするからです。
壊れたPGroongaの内部データベースを復旧する手順は次の通りです。
最初にすべての接続を切断します。PGroongaの内部データベースを使っている接続が残っているとそれらの接続はクラッシュするかもしれません。
次にPostgreSQLに再度接続し、pgroonga_database_remove()
関数を実行します。
SELECT pgroonga_database_remove();
次にこの接続を切断します。
この接続ではpgroonga_database
モジュールが提供する機能以外はPGroongaのどの機能も使ってはいけません。もしPGroongaの機能を使うとこの接続でPGroongaの内部データベースを開こうとします。そうするとクラッシュするかもしれません。
次にPostgreSQLに再接続してすべてのPGroongaのインデックスを再作成します。
REINDEX INDEX pgroonga_index1;
REINDEX INDEX pgroonga_index2;
-- ...
これで復旧完了です。PostgreSQLが動いているホストにログインする必要はありません。