これはPGroonga 2.X用のドキュメントです。古いPGroongaを使っているならPGroonga 1.xのドキュメントを見てください。

pgroonga_vacuum関数

2.1.7で追加。

概要

pgroonga_vacuum関数は内部的に不要になったGroongaのテーブル・カラム・レコードを削除します。PGroongaのものではなくGroongaのものであることに注意してください。通常、この関数を呼ぶ必要はありません。 なぜならVACUUM時に同等の処理を実行するからです。

次のケースのときはこの関数を呼ぶ必要があります。

構文

この関数の構文は次の通りです。

bool pgroonga_vacuum()

常にtrueを返します。処理中に問題があった場合は、エラーが発生します。

使い方

以下はサンプルスキーマです。

CREATE TABLE memos (
  content text
);

CREATE INDEX pgroonga_index ON memos USING PGroonga (content);

現在の内部的に使っているGroongaのテーブル名を保存します。\gset\echopsqlのメタコマンドです。

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)