PostgreSQL Advent Calendar 2015 Day2のテクニックを応用して、全文検索モジュールpg_bigmをpsql経由でセットアップ(ダウンロードからDB登録まで)します。
-- シェルのソースを保存するテーブルを作成します。
CREATE TABLE shell (num serial, line TEXT);
-- pg_bigmのダウンロードとコンパイルを行うシェルをテーブルに保存します。
COPY shell (line) FROM stdin;
#!/bin/sh
cd /tmp
wget 'http://osdn.jp/frs/redir.php?m=jaist&f=%2Fpgbigm%2F63792%2Fpg_bigm-1.1-20150910.tar.gz'
tar zxf pg_bigm-1.1-20150910.tar.gz
cd pg_bigm-1.1-20150910
make USE_PGXS=1
make USE_PGXS=1 install
\.
-- テーブルからシェルの実行ファイルを作成して実行します。
-- これにより、pg_bigmのソースがダウンロードされ、コンパイルされます。
COPY (SELECT line FROM shell ORDER BY num) TO PROGRAM 'tee /tmp/inst_bigm.sh; chmod 744 /tmp/inst_bigm.sh; /tmp/inst_bigm.sh';
-- pg_bigmをDBに登録します。
CREATE EXTENSION pg_bigm;
-- ALTER SYSTEM SETで、pg_bigmをshared_preload_librariesに設定します。
ALTER SYSTEM SET shared_preload_libraries TO 'pg_bigm';
-- shared_preload_librariesの設定変更を反映するために、PostgreSQLを再起動します。
-- まずはPostgreSQLを再起動するシェルをテーブルに保存します。
TRUNCATE shell;
COPY shell (line) FROM stdin;
#!/bin/sh
pg_ctl -m f stop
pg_ctl start
\.
-- テーブルからシェルの実行ファイルを作成して実行します。
-- これにより、PostgreSQLが再起動され、shared_preload_librariesのpg_bigmの設定が有効になります。
COPY (SELECT line FROM shell ORDER BY num) TO PROGRAM 'tee /tmp/restart_pg.sh; chmod 744 /tmp/restart_pg.sh; /tmp/restart_pg.sh &';