Home > Web開発, 雑談 > PostgreSQL 8.3.6とLudia1.5.1でハマった・・・というメモ 
ネタ蔵キーワード:PostgreSQL [インターネット・IT]

PostgreSQL 8.3.6とLudia1.5.1でハマった・・・というメモ 
ネタ蔵キーワード:PostgreSQL [インターネット・IT]

Y
Creative Commons License photo credit: weegeebored

新しく借りたサーバの運用をはじめようと思って、セットアップ作業をスタートしました。

CentOS ES 5には、デフォルトではPostgreSQLがインストールされていませんでした。
そこで「まずはここから」ってことで・・・

yumでlistを取ってみると、8.1.1なんてバージョンのパッケージがlistされます。
そこで、postgresql.orgのリポジトリから最新パッケージをインストールしようと思って、pgdg-centosパッケージをダウンロード&インストール。

ここでlistをとってみると、8.3.6というバージョンです(8.4.1は、素人による野性の勘で避けておいたw)。さっそくインストール(server/devel/contribあたり。調子に乗ってptopとかpostgisを入れたりもした)。

で、sennaで全文検索したいので、mecabとsennaの最新版を入れて、最後にludiaをインストールしようとしたところ・・・makeで以下のようなエラーがでました。

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

「へ?」と思いつつ、「なんか忘れたかな?」といままでの作業を再確認。
思いつくミスは無い気がします・・・

pgsenna2.cってのは、名前がちょとややこしいのですが、Ludiaのソースコード。
エラー部分をチェックしてみると別に変ではありません。
IndexBuildHeapScan()ってのは、PostgreSQLのindexingに関する関数で、今度はインストールしたPostgreSQLのheaderファイルをチェックしてみました。

確かに・・・
pgsenna2.cの571行目でのIndexBuildHeapScan()関数呼び出しの引数は5個。
PostgreSQL 8.3.6のheaderファイルの関数定義での引数は6個。。。

どうやら、Ludia 1.5.1はPostgreSQL 8.3.5までにしか対応してない・・・というか、PostgreSQLが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.

ってなことで変更されたってのがわかりました。

Ludiaがこの変更に対応するのを待っていることはできないので・・・
久しぶりにC言語のコードを読みつつ(LudiaとPostgreSQLの該当部分のみ)、テキトーにpgsenna2.cを変更してmakeを成功させました。

どう変更したかは、「裏を取れてない(合ってるかどうか確信を持てない)」ので、ここには書かないでおきます。
こういうリスクは自分だけのものにしておきます(w

もちろんLudiaが新しくなったら速攻そっちにアップデートするつもりです。
(「PostgreSQLを8.3.5にすりゃいーじゃん」ってのはあるんだけど、なんだか意地になってるボクw)

netazo Web開発, 雑談 , ,

  1. No comments yet.
-->
-->