これはPGroonga 2.X and 3.X用のドキュメントです。古いPGroongaを使っているならPGroonga 1.xのドキュメントを見てください。
pgroonga_wal_apply
関数pgroonga_wal_apply
関数は未適用のWALを適用します。通常、この関数を使う必要はありません。なぜなら、PGroongaはINSERT
、DELETE
、UPDATE
、SELECT
のときなど自動的に未適用のWALを適用するからです。
この関数の構文は次の通りです。
bigint pgroonga_wal_apply(pgroonga_index_name)
pgroonga_index_name
はtext
型の値です。未適用のWALを適用したいPGroognaのインデックスの名前を指定します。
適用した操作数を返します。
この関数の別の構文は次の通りです。
bigint pgroonga_wal_apply()
すべてのPGroongaのインデックスに対して未適用のWALを適用します。
適用した操作数を返します。
サンプルスキーマとデータは次の通りです。
SET pgroonga.enable_wal = yes;
CREATE TABLE memos (
content text
);
CREATE INDEX pgroonga_memos_index
ON memos
USING pgroonga (content);
INSERT INTO memos VALUES ('PGroonga (PostgreSQL+Groonga) is great!');
PGroongaのデータベースが壊れた状況を再現します。
SELECT pgroonga_command('delete',
ARRAY[
'table', 'IndexStatuses',
'key', 'pgroonga_memos_index'::regclass::oid::text
])::json->>1;
-- ?column?
-- ----------
-- true
-- (1 row)
SELECT pgroonga_command('table_remove',
ARRAY[
'name', 'Lexicon' ||
'pgroonga_memos_index'::regclass::oid ||
'_0'
])::json->>1;
-- ?column?
-- ----------
-- true
-- (1 row)
SELECT pgroonga_command('table_remove',
ARRAY[
'name', pgroonga_table_name('pgroonga_memos_index')
])::json->>1;
-- ?column?
-- ----------
-- true
-- (1 row)
これで未適用のWALがある状態になりました。明示的に未適用のWALを適用できます。
SELECT pgroonga_wal_apply('pgroonga_memos_index');
-- pgroonga_wal_apply
-- --------------------
-- 7
-- (1 row)
PGroongaのインデックスの名前を省略できます。PGroongaのインデックスの名前を省略すると、すべてのPGroongaのインデックスのすべての未適用のWALを明示的に適用します。
SELECT pgroonga_wal_apply();
-- pgroonga_wal_apply
-- --------------------
-- 7
-- (1 row)