これはPGroonga 2.X and 3.X用のドキュメントです。古いPGroongaを使っているならPGroonga 1.xのドキュメントを見てください。
pgroonga_vacuum
関数2.1.7で追加。
pgroonga_vacuum
関数は内部的に不要になったGroongaのテーブル・カラム・レコードを削除します。PGroongaのものではなくGroongaのものであることに注意してください。通常、この関数を呼ぶ必要はありません。 なぜならVACUUM
時に同等の処理を実行するからです。
次のケースのときはこの関数を呼ぶ必要があります。
すべてのPGroongaのインデックスを削除したとき。PGroongaのインデックスがないとVACUUM
時に同等の処理を実行できません。
ストリーミングレプリケーションを使っているとき。スレーブ上でだけこの関数を実行する必要があります。なぜなら、スレーブではVACUUM
が実行されないからです。
この関数の構文は次の通りです。
bool pgroonga_vacuum()
常にtrue
を返します。処理中に問題があった場合は、エラーが発生します。
以下はサンプルスキーマです。
CREATE TABLE memos (
content text
);
CREATE INDEX pgroonga_index ON memos USING PGroonga (content);
現在の内部的に使っているGroongaのテーブル名を保存します。\gset
と\echo
はpsql
のメタコマンドです。
SELECT pgroonga_table_name('pgroonga_index')
\gset old_
\echo :old_pgroonga_table_name
-- Sources17058
REINDEX
を実行すると現在の内部的なGroongaのテーブルが変わります。
REINDEX INDEX pgroonga_index;
SELECT pgroonga_table_name('pgroonga_index');
-- pgroonga_table_name
-- ---------------------
-- Sources17059
-- (1 row)
VACUUM
を実行するまでは古い内部的なGroongaのテーブルはまだ存在します。
SELECT pgroonga_command('object_exist',
ARRAY[
'name', :'old_pgroonga_table_name'
])::json->>1;
-- ?column?
-- ----------
-- true
-- (1 row)
pgroonga_vacuum()
を呼ぶと古い内部的なGroongaのテーブルを削除できます。
SELECT pgroonga_vacuum();
-- pgroonga_vacuum
-- -----------------
-- t
-- (1 row)
SELECT pgroonga_command('object_exist',
ARRAY[
'name', :'old_pgroonga_table_name'
])::json->>1;
-- ?column?
-- ----------
-- false
-- (1 row)