[pgsql-jp: 39186] sylph-searchのPostgreSQL 8.3への移行

Tatsuo Ishii ishii @ sraoss.co.jp
2008年 2月 10日 (日) 20:30:54 JST


石井です.

# sylpheed MLにも同じものを投稿しています.たぶん購読者はほとんどオー
# バーラップしていないと思いますが,2度読まれた方は申し訳ありま
# せん.

最近PostgreSQLの8.3が出たので,PostgreSQLを使ってメールを全文検索する
ソフト
sylph-searcher(http://sylpheed.sraoss.jp/ja/download.html#searcher)を
動かしてみた経験をご紹介します.結論から言うと,きちんと手続きを踏めば,
8.3以前のバージョンで動いていたsylph-searcher を問題なく移行できます.
ご参考までに.

(ただし,DBのロケールをC以外で使っている場合の移行手続きは確認していま
せん)

# なお,sylph-searcherを8.3.0にインストールするためには,附属の
# README.jaの手続きを若干変更する必要があると思いますが,こちらも未確
# 認です.

8.3移行の前の環境はPostgreSQL 8.2.6ですが,8.1 でも同様と思います.OS
は Vine Linux 4.2ですが,他のLinuxでも同じ考え方で移行できると思います.

1) PostgreSQL 8.3をインストールする

以前のPostgreSQLを邪魔しないように,とりあえず別な場所にインストールし
ます.私は,/usr/local/src/pgsql/8.3.0/にインストールし,ポート番号は
5435にしました.

以下,8,2.6のPostgreSQLは標準の/usr/local/pgsql以下にインストールされ,
5432ポートで動いているものとします.PostgreSQL 8.3.0のソースは/tmpに置
いておきます.PostgreSQLのスーパユーザ(postgres)で実施します.

$ cd /usr/local/src/pgsql/8.3.0 (このディレクトリはあらかじめ作ってお
きます)

$ tar xfz /tmp/postgresql-8.3.0.tar.gz
$ cd postgressql-8.3.0
$ ./configure --prefix=/usr/local/src/pgsql/8.3.0
$ make
$ make install

/usr/local/src/pgsql/8.3.0/bashrcというファイルを作り,中に以下を書い
ておきます.

PG=`pwd`
export PGDATA=$PG/data
PATH=$PG/bin:$PATH
export PGPORT=5435

$ cd /usr/local/src/pgsql/8.3.0
$ source bashrc
$ initdb -E EUC_JP --no-locale
$ postmaster -p 5435&

これでPostgreSQL 8.3が動きました.

2) sylph-searcherのデータベースの移行

PostgreSQL 8.3はそれ以前のバージョンとは物理的なデータベースの互換性が
ないので,PostgreSQL附属のpg_dumpを使ってデータ移行をします.pg_dumpは
8.3に附属のものを使用します.

PostgreSQL 8.3は,以前のバージョンと違って tsearch2 (全文検索エンジン)
が本体に組み込まれているので,ちょっと工夫が必要です.sylph-searcherの
データベースは"sylph"であるものとします.

$ pg_dump -s -p 5432 -t msginfo -t msg_folderinfo sylph > /tmp/sylph.dump
$ pg_dump -a -p 5432 -t msginfo -t msg_folderinfo sylph > /tmp/sylph-data.dump 
$ createdb -E UTF_8 sylph
$ psql -f /tmp/sylph.dump sylph
$ psql -f /tmp/sylph-data.dump sylph
$ psql -f function.sql sylph (function.sqlはsylph-searcherの"sql"以下に附属しているものです)

3) sylph-searcherで確認

sylph-searcherを起動し,設定でポート番号を5435に変更し,sylph-searcher
が動作するかどうか確認します.

4) PostgreSQL 8.3をデフォルトにする

もう8.2.6が不必要ならば,8.3.0を5432ポートで動かします.

$ pg_ctl -D /usr/local/pgsql/data -m f stop
$ pg_ctl -D /usr/local/src/pgsql/8.3.0/data -m f stop

一度postgresをログアウトします.

$ postmaster&

もし/usr/local/pgsql/以下に8.3.0を入れたい場合は,以下のようにします.

$ pg_ctl -D /usr/local/pgsql/data -m f stop
$ pg_ctl -D /usr/local/src/pgsql/8.3.0/data -m f stop
$ cd postgressql-8.3.0
$ make clean
$ ./configure
$ make
$ make install
$ mv /usr/local/pgsql/data /usr/local/pgsql/data.old
$ mv /usr/local/src/pgsql/8.3.0/data /usr/local/pgsql/data

一度postgresをログアウトします.

$ postmaster&

5) Tips

sylph-searcherのデータベースが大きい場合はかなり移行に時間がかかります.
私の場合は,メールが36万件以上,DBサイズにして2GB以上あったため,以下
のような工夫をしました.それでも数時間を要しました.ちなみに,ハードは,
メモリ2GB,core2 duo 1.1GHz搭載のLet's Noteです.

postgresql.confに以下を追加

fysnc=off
autovacuum=off
work_mem=512MB

データ移行が終わったら,

fysnc=on
autovacuum=on

に戻しておきます.
--
Tatsuo Ishii
SRA OSS, Inc. Japan



pgsql-jp メーリングリストの案内