PostgreSQLでバイグラムの全文検索環境をインストール@Mac

PostgreSQLには標準で[pg_trgm](http://www.postgresql.jp/document/9.2/html/pgtrgm.html)というN-gramによる全文検索のための拡張があるのだが、これは名前の通りトリグラムであって、検索文字列が1〜2文字のときにはインデックスが効かないという漢字圏にはあまり嬉しくないものになっている。

それを何とかしたいと考えた、我らがNTTデータ様が作ってくれたのが[pg_bigm](http://pgbigm.sourceforge.jp/)。
バイグラムで1〜2文字の検索にもバッチリ対応。
ただしまだ正式なPostgreSQLの拡張ではないので、自分でビルドする必要あり。

そのMacでの手順を以下に記します。  


まずbrewで必要なライブラリをインストール。

```bash:Homebrewはすでにインストール済みとの前提
brew install readline ossp-uuid openssl
```

公式サイトからPostgreSQLの最新版ソースを落としてきてビルドする。

```bash:configureオプション長いけど、かなり試行錯誤してこれになったのでそのままコピペすべし
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をエディタで開いて以下のように追加。

```diff:別にコピペしなくても、なんかそれらしく書いてあればおｋ
+PG_HOME=/usr/local/pgsql
+export PATH=${PG_HOME}/bin:${PATH}
```

設定を反映させる。
（※Macには最初からPostgreSQL用のコマンドが/usr/binに存在しているため、これをやらないと今インストールした方のコマンドが呼ばれない）

```bash:bashの人は.bashrcに読み替えて
source ~/.zshrc
```

ここから本題。pg_bigm拡張をインストール。

```bash:問答無用にmasterから落としてきてますが、本当は安定版を入れるのがまっとうな人のやること
cd contrib/
git clone git://git.sourceforge.jp/gitroot/pgbigm/pg_bigm.git
cd pg_bigm/
make USE_PGXS=1
sudo make install
```

PostgreSQL用のユーザーを作る。

```bash:ポスグレはUNIXユーザーとDBのユーザーが結びついてて面倒ですね
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サーバが起動するためのディレクトリを作っておく。

```bash:/usr/local/var/posgresはbrewでインストールしたときと同じディレクトリなので、別にしたい人は適当な場所に
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の拡張を有効にする。

```bash:おなじみのpostgresql.conf
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
```

```diff:/usr/local/pgsql/postgresql.confを編集
-#shared_preload_libraries = ''		# (change requires restart)
+shared_preload_libraries = 'pg_bigm'
```

postgresユーザーになってデータベースを初期化、そのまま起動。

```bash:波動エンジン起動
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
```

あとは[ドキュメント](http://pgbigm.sourceforge.jp/pg_bigm.html)を参考に、適当なデータベースを作成してCREATE EXTENSION、テーブルにGINインデックスを設定すれば、めでたくpg_bigmが使えるようになる。