PostgreSQLの9.1以降では全文検索がデフォルトでサポートされているというので、早速試してみたところbrewでインストールしたものだとマルチバイト文字に対応していません。仕方が無いのでソースから入れようとしたのですが、手こずりまくった挙げ句、上手く解決できなかったのでメモ書きを残しておきます。
コチラの記事を参考に、contrib/pg_trgm/trgm.hの#define KEEPONLYALNUMをコメントアウトしてコンパイルします。
$ tar zxvf postgresql-9.1.4.tar.gz $ cd postgresql-9.1.4 $ vim contrib/pg_trgm/trgm.h # KEEPONLYALNUMをコメントアウト $ ./configure $ make $ sudo make install-world
すんなり完了したように見えたのですが、これを起動してみると日本語の全文検索はできるものの、psqlで日本語の入力ができなくなっていました。ちなみにコチラの記事にあるようにpsql -nとreadlineを使わないオプションをつければ、日本語入力はできるのですが、readlineの機能が使えないので実用に耐えません。
少し調べていると普通にpsqlをビルドするとlibreadlineをリンクするように指定するべしという情報がチラホラあったので(指定しないとlibeditがリンクされる)、libreadlineをリンクするようにconfigureをし直してみました。合わせてその他のオプションもbrewのpostgresqlのfomulaを参考に指定し直してみました。
$ ./configure --with-readline \ --enable-thread-safety \ --with-bonjour --with-gssapi --with-krb5 --with-openssl \ --with-libxml --with-libxslt --with-ossp-uuid --with-python \ --with-perl ARCHFLAGS='-arch x86_64' $ make && sudo make install
ところがこれでもやはり日本語の入力を受け付けません。手元のlibreadlineが駄目なのかなと思い、以下のようにbrewでインストールされているlibreadlineをリンクしてみましたが、やはり上手くいきません。
$ ./configure --with-readline \ --with-libs=/usr/local/Cellar/readline/6.2.4/lib \ --with-includes=/usr/local/Cellar/readline/6.2.4/include \ --enable-thread-safety \ --with-bonjour --with-gssapi --with-krb5 --with-openssl \ --with-libxml --with-libxslt --with-ossp-uuid --with-python \ --with-perl ARCHFLAGS='-arch x86_64'
brewのfomulaと同じパッチを当ててもやはり駄目で、手詰まりになってしまいました。仕方が無いので最終手段という事でbrewのfomulaを書き換えてインストールする事にしました。brew edit postgresqlでFomulaに下記のパッチを加えます。
--- a/contrib/pg_trgm/trgm.h 2012-09-04 17:23:34.000000000 -0400 +++ b/contrib/pg_trgm/trgm.h 2012-09-04 17:23:41.000000000 -0400 @@ -12,7 +12,7 @@ /* options */ #define LPADDING 2 #define RPADDING 1 -#define KEEPONLYALNUM +//#define KEEPONLYALNUM /* * Caution: IGNORECASE macro means that trigrams are case-insensitive. * If this macro is disabled, the ~~* operator must be removed from the
後は普通にbrew installを行えば日本語で全文検索ができるPostgreSQLがインストールできました。無事にpsqlで日本語が打てます。
$ brew uninstall postgresql # 一旦アンインストール $ brew edit postgresql # 一番下に上記のパッチを追加 $ brew install postgresql
最初からこうしておけば良かったのですが、途中は意地になって色々試してしまいました。挙げ句解決できないとか残念です。どなたか理由をご存知であれば教えてください。