雑文発散

«前の日記(2009-06-20) 最新 次の日記(2009-06-24)» 編集
過去の日記

2009-06-21 [長年日記]

[PostgreSQL] 1台の CentOS で複数の PostgreSQL を立ち上げる方法

昨日、plproxy とかを試す際に、1台の CentOS マシンで複数の PostgreSQL を立ち上げたので、その時の方法をメモ。環境は、CentOS 5.2 に PostgreSQL 8.3.7 の RPM が入った状態。

基本的には、デフォルトの設定からポート番号とデータディレクトリを変更してやれば、複数の PostgreSQL が起動できる。具体的には、起動スクリプトの設定を変更してやれば良い。 まずは、デフォルトの起動スクリプトをコピーしてやる。

# cd /etc/init.d/
# cp -a postgresql postgresql.5433

コピーした起動スクリプトの以下の部分を変更してやる。今回は 5433 ポートで立ち上げようとしている。PGDATA へ指定するディレクトリ名は何でもいいんだけど、考えるのが面倒なのでポート番号をそのまま付加してやっている。

# Set defaults for configuration variables
PGENGINE=/usr/bin
PGPORT=5433
PGDATA=/var/lib/pgsql.5433/data
 
if [ -f "$PGDATA/PG_VERSION" ] && [ -d "$PGDATA/base/template1" ]
then
        echo "Using old-style directory structure"
else
        PGDATA=/var/lib/pgsql.5433/data
fi
PGLOG=/var/lib/pgsql.5433/pgstartup.log

起動する、、、前にデータディレクトリの初期化をしてやる。

# /etc/init.d/postgresql.5433 initdb

初期化が終わったら、今度こそ起動してやる。

# /etc/init.d/postgresql.5433 start

起動状態を見てみる。デフォルトの PostgreSQL(ポート番号 5432)も同時に起動している状態では、次のように2つの postmaster が存在しているはず。

# ps ax | grep postmaster | grep -v grep
 2300 ?        S      0:00 /usr/bin/postmaster -p 5433 -D /var/lib/pgsql.5433/data
15403 ?        S      0:01 /usr/bin/postmaster -p 5432 -D /var/lib/pgsql/data

接続テストをしてみる。

# su - postgres
$ psql -p 5433 template1
Welcome to psql 8.3.7, the PostgreSQL interactive terminal.
 
Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit
 
template1=# 

接続ができれば、デフォルトの 5432 ではなく 5433 ポートで起動できている。他にも同時に立ち上げたければ、5433 ではなく他のポート番号を使ってやれば良い。

ただし、この状態では、TCP/IP ではなく、UNIX ドメインソケットでの接続である。これは、設定ファイルの postgresql.conf のデフォルトがそうなっているためで、TCP/IP で接続したければ、設定ファイルを変更して PostgreSQL を再起動すれば良い。

最後に(お好みに応じて)OS 起動時に自動的に立ち上がるように設定しておく。

# chkconfig --add postgresql.5433
# chkconfig postgresql.5433 on

設定はこんな感じになる。

# chkconfig --list | grep postgres
postgresql     	0:off	1:off	2:on	3:on	4:on	5:on	6:off
postgresql.5433	0:off	1:off	2:on	3:on	4:on	5:on	6:off

この状態であれば、OS 起動時にポート 5432 と 5433 の2つの PostgreSQL が自動的に起動する。