PostgreSQLには標準でpg_trgmというN-gramによる全文検索のための拡張があるのだが、これは名前の通りトリグラムであって、検索文字列が1〜2文字のときにはインデックスが効かないという漢字圏にはあまり嬉しくないものになっている。
それを何とかしたいと考えた、我らがNTTデータ様が作ってくれたのがpg_bigm。
バイグラムで1〜2文字の検索にもバッチリ対応。
ただしまだ正式なPostgreSQLの拡張ではないので、自分でビルドする必要あり。
そのMacでの手順を以下に記します。
まずbrewで必要なライブラリをインストール。
brew install readline ossp-uuid openssl
公式サイトからPostgreSQLの最新版ソースを落としてきてビルドする。
wget http://ftp.postgresql.org/pub/source/v9.2.4/postgresql-9.2.4.tar.bz2
cd postgresql-9.2.4/
./configure --with-readline \
--with-libs=/usr/local/Cellar/readline/6.2.4/lib \
--with-libs=/usr/local/lib \
--with-libs=/usr/local/opt/openssl/lib \
--with-includes=/usr/local/Cellar/readline/6.2.4/include/readline \
--with-includes=/usr/local/Cellar/ossp-uuid/1.6.2/include \
--with-includes=/usr/local/Cellar/openssl/1.0.1e/include/openssl \
--enable-thread-safety \
--with-bonjour --with-gssapi --with-krb5 --with-openssl \
--with-libxml --with-libxslt --with-ossp-uuid --with-python \
--with-perl --with-openssl ARCHFLAGS='-arch x86_64'
make
sudo make install
環境変数を良きに計らう。
zshの人は~/.zshrc、bashの人は~/.bashrcをエディタで開いて以下のように追加。
+PG_HOME=/usr/local/pgsql
+export PATH=${PG_HOME}/bin:${PATH}
設定を反映させる。
(※Macには最初からPostgreSQL用のコマンドが/usr/binに存在しているため、これをやらないと今インストールした方のコマンドが呼ばれない)
source ~/.zshrc
ここから本題。pg_bigm拡張をインストール。
cd contrib/
git clone git://git.sourceforge.jp/gitroot/pgbigm/pg_bigm.git
cd pg_bigm/
make USE_PGXS=1
sudo make install
PostgreSQL用のユーザーを作る。
sudo dscl . create /Users/_postgres UniqueID 113
sudo dscl . create /Users/_postgres PrimaryGroupID 113
sudo dscl . create /Users/_postgres NFSHomeDirectory /usr/local/pgsql/
sudo dscl . create /Users/_postgres RealName "PostgreSQL Server"
sudo dscl . create /Users/_postgres Password "*"
sudo dscl . create /Users/_postgres UserShell /bin/zsh
sudo dscl . append /Users/_postgres RecordName postgres
sudo dscl . create /Groups/_postgres
sudo dscl . create /Groups/_postgres PrimaryGroupID 113
sudo dscl . create /Groups/_postgres RealName "PostgreSQL Users"
sudo dscl . append /Groups/_postgres RecordName postgres
_postgresユーザーのデフォルトシェルをzshにした人は自分の.zshrcを、bashにした人は.bashrcをコピーしておくと便利。
PostgreSQLサーバが起動するためのディレクトリを作っておく。
sudo cp ~/.zshrc /usr/local/pgsql/
sudo mkdir -pm 0700 /usr/local/var/postgres/data
sudo mkdir /usr/local/var/postgres/log
sudo chown -R postgres:postgres /usr/local/var/postgres
設定ファイルでpg_bigmの拡張を有効にする。
sudo cp /usr/local/pgsql/share/postgresql.conf.sample /usr/local/pgsql/postgresql.conf
sudo cp /usr/local/pgsql/share/pg_hba.conf.sample /usr/local/pgsql/pg_hba.conf
-#shared_preload_libraries = '' # (change requires restart)
+shared_preload_libraries = 'pg_bigm'
postgresユーザーになってデータベースを初期化、そのまま起動。
sudo su - postgres
/usr/local/pgsql/bin/initdb -E UTF8 -D /usr/local/var/postgres/data --locale=C
/usr/local/pgsql/bin/pg_ctl -D /usr/local/var/postgres/data -l /usr/local/var/postgres/log/postgresql.log start
あとはドキュメントを参考に、適当なデータベースを作成してCREATE EXTENSION、テーブルにGINインデックスを設定すれば、めでたくpg_bigmが使えるようになる。