PostgreSQLの8.3に対応のLudiaの1.5がリリースされたのですが、8.3で利用するとvacuum非対応になり、vacuum後はREINDEXが必要になっていましました。
これは8.3でのHOTがらみの変更で、以前と同じ仕組みだと対応できないということなのでとりあえずは仕方ないのですが、運用上はなんとか対応する必要があります。
ひとつはautovacuumをoffにして運用する方法です。
もうひとつは、Ludiaのインデックスを使用しているテーブルだけautovacuumの対象外にして運用する方法です。
どちらにしても、Ludiaのインデックスはvacuum実行後にreindexを行う必要がありますが、Ludiaのインデックスを使用しているのは一部のテーブルのみという場合、そこだけautovacuumの対象外にして、(たとえ、それがスクリプトの仕事だとしても)定期メンテナンスを行うのが楽です。
特定のテーブルをautovacuumの対象外にするには、以下のようにシステムカタログpg_autovacuumにレコードを作成します。
まず、テーブルのpg_class.oidを調べます。
ryo=# select oid,relname from pg_class where relname = 'groups';
oid | relname
-------+---------
19123 | groups
(1 row)
pg_autovacuum.enabled=falseとしてレコードを作成します。
ryo=# insert into pg_autovacuum values (19123, false, -1, -1, -1, -1,
-1, -1, -1, -1);
INSERT 0 1
Time: 88.973 ms
autovacuumとpg_autovacuumについてはドキュメントの
23.1. 定常的なバキューム作業 – 23.1.4. 自動バキュームデーモン
44.10. pg_autovacuum
を参考にどうぞ。
