これはPGroonga 1.X用のドキュメントです。新しいPGroongaを使っているならPGroonga 2.xのドキュメントを見てください。
pgroonga.flush
関数pgroonga.flush
関数はメモリー上にだけある変更を確実にディスクに書き込みます。この処理は自動的に行われるので、通常、この関数を使う必要はありません。しかし、クラッシュ・強制終了によるPGroongaインデックスの破損を防ぎたい場合はこの関数を使う必要があるかもしれません。
通常、ユーザーはサーバーを強制終了してはいけません。しかし、いくつか強制終了してしまうケースがあります。たとえば、Windowsアップデートにより意図せずにWindowsサーバーが再起動することがあるかもしれません。
もし、PGroongaを使っているPostgreSQLが強制終了したらメモリー上にだけある変更が失われるかもしれません。強制終了の前にpgroonga.flush
関数を呼べばメモリー上にだけある変更がなくなります。つまり、ユーザーがPGroongaを使っているPostgreSQLを強制終了してもPGroongaのインデックスは壊れないということです。
もし、メモリー上にだけある変更が多い場合、pgroonga.flush
の実行時間が長くなるかもしれません。これは使用しているディスクの書き込み性能に依存します。
この関数の構文は次の通りです。
bool pgroonga.flush(pgroonga_index_name)
pgroonga_index_name
はtext
型の値です。フラッシュ対象のインデックス名です。このインデックスはUSING pgroonga
付きで作成してある必要があります。
pgroonga.flush
は常にtrue
を返します。なぜなら、もしpgroonga.flush
が失敗したら値を返すのではなくエラーになるからです。
以下はサンプルのスキーマとデータです。このスキーマでは、検索対象のデータと出力対象のデータはどちらもインデックス対象のカラムです。
CREATE TABLE terms (
id integer,
title text,
content text
);
CREATE INDEX pgroonga_terms_index
ON terms
USING pgroonga (title, content);
以下のようにpgroonga.flush
を呼び出すことでメモリー上にだけあるpgroonga_terms_index
関連の変更をディスクに書き出すことができます。
SELECT pgroonga.flush('pgroonga_terms_index');
-- flush
-- -------
-- t
-- (1 row)
存在しないインデックス名を指定するとpgroonga.flush
はエラーになります。
SELECT pgroonga.flush('nonexistent');
-- ERROR: relation "nonexistent" does not exist