« 17インチ MacBook Pro インプレッション:メモリ増量 | トップページ | pg_restore 時間かかりすぎでお困りの皆様 »

2009年3月 5日 (木)

PostgreSQL 8.3.6 に ludia を入れた

PostgreSQL 8.3 系の最新バージョンである 8.3.6 に、全文検索システム Ludia 1.5.1 をインストールしてみたところ、

pgsenna2.c:571: error: too few arguments to function ‘IndexBuildHeapScan’

というエラーが発生してコンパイルできない。

ちなみに、OS は CentOS 5.2。
CentOS 5.2 + PostgreSQL 8.3 + Ludia 1.5.1 の組み合わせでのセットアップは何度となくやっている。
ということで、基本的には失敗しないはず。

で、真面目にエラーを見てみると、IndexBuildHeapScan 関数の引数が少ないとお怒りのご様子。

うーむ、イヤな予感・・・

2009.2 にリリースされた PostgreSQL 8.3.6 から、IndexBuildHeapScan 関数のプロトタイプが変更された模様。
Ludia はまだ対応バージョンがリリースされていない。

 

さて、どうしたもんか・・・

まずは、IndexBuildHeapScan 変更の詳細を調べてみる。

8.3.6 のリリースノートを見ると

Prevent synchronous scan during GIN index build (Tom)
Because GIN is optimized for inserting tuples in increasing TID order, choosing to use a synchronous scan could slow the build by a factor of three or more.

日本語訳はこちら

GINインデックス構築時の同期スキャンを防止します。(Tom)
GINはTID順序を増やすことでタプルの挿入に最適化されていますので、同期スキャンを使用することを選択すると、3倍以上構築が低速になる可能性がありました。

汎用転置インデックスを構築している間、同期スキャンを行わないようにできるようにしたということ。

で、ソースコード(src/backend/catalog/index.c)を見てみると、

double IndexBuildHeapScan(Relation heapRelation,
                          Relation indexRelation,
                          IndexInfo *indexInfo,
                          bool allow_sync,
                          IndexBuildCallback callback,
                          void *callback_state);

追加されたのは第4引数。

  • 従来と同じ動作なら true
  • 従来と異なる動作で、汎用転置インデックス構築中に同期スキャンをしたくなければ false

を指定することになる。

これなら大丈夫そうですな。

 

という訳で、Ludia のソースに手を入れて、8.3.6 対応化を行うことに決定。

pgsenna2.c の該当箇所を変更。
同期スキャンが走ることのメリットより、構築の遅延の方がデメリットが大きいと判断し、IndexBuildHeapScan の第4引数は false にしておいた。

これで、コンパイル成功。

無事、Ludia も利用できるようになりました!

« 17インチ MacBook Pro インプレッション:メモリ増量 | トップページ | pg_restore 時間かかりすぎでお困りの皆様 »

DB」カテゴリの記事

PostgreSQL」カテゴリの記事

パソコン・インターネット」カテゴリの記事

プログラミング」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« 17インチ MacBook Pro インプレッション:メモリ増量 | トップページ | pg_restore 時間かかりすぎでお困りの皆様 »

ブログパーツ


2013年12月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
無料ブログはココログ