1台のPCで複数のPostgreSQLサーバ構築
開発環境が増えるたびに仮想OSが増えたりするので
1台のPCにDBサーバが複数起動出来たら便利だなぁーと思っていたのですが、
調べてみたら色々やり方が乗っていたのでまとめてみました。
ちなみに紹介する環境は Windows7 & PostgreSQL 9.2です。
正直あまりLinuxでもやることは変わらないと思いますが
大まかな手順
- 新しいデータベースクラスタ(以下DBクラスタ)の準備
- 設定ファイル(postgresql.conf)を編集
- サービスに登録
という感じになっています。
基本的にコマンドラインで操作していきますので、環境変数PathにPostgreSQLのパスが通ってると捗ります。
普通にインストールした場合だと、インストーラが勝手に登録していると思います。
DBクラスタの準備
DBクラスタとは、データベース格納領域です。デフォルトでインストールしたなら「C:/Program Files/PostgreSQL/9.2/data」がDBクラスタです。
1つのDBサーバは1つのDBクラスタしか管理出来ないので、同時に複数のDBサーバを運用する場合は、複数のDBクラスタが必要になります。
1−1.新規にDBクラスタを作成する
作成したい場所にフォルダを作成し、以下のコマンドを実行
initdb -U <スーパーユーザ名> -D <新規フォルダパス>
※新規フォルダをPostgreSQLのインストールフォルダ内に設定した場合、initdbが正常に動かない場合があります。PostgreSQLのフォルダのアクセス権が変更されているので、フォルダのアクセス権を変更してから実行してくだい。
1−2.既にあるDBクラスタをコピーする
コピーするDBクラスタを使用しているDBサーバを停止させ、DBクラスタをコピペ
※DBクラスタが使用されているかどうかは、DBクラスタ内に「postmaster.pid」というファイルがあれば使用中です。
また、pg_ctl status -D (DBクラスタのパス)で調べることができます。
①設定ファイル(postgresql.conf)を編集
DBクラスタ内のpostgresql.confを編集します。postgresql.conf内のポート番号を指定している場所で、他のポート番号と被らないような番号に指定します。
port=5433(例)
あと個人的な趣向(?)ですが、デフォルトではPostgreSQLのログが出力されないのでログが出力されるように設定します。
300行目当たりの「logging_collector」のコメントアウトを解除して、パラメータをonにします。
logging_collector = on
サーバが起動するか確認します
サーバ起動:pg_ctl start -D (新規DBクラスタパス) -o "-p (設定したポート番号)"
サーバ停止:pg_ctl stop -D (新規DBクラスタパス)
接続確認:psql -U (スーパユーザ名) -p (設定したポート番号)
initdbで作成した場合、クライアントに対してパスワード認証しないので、ユーザ名だけで接続できます。
認証が必要な場合、必要に応じてパスワードや認証方式などの設定を変更しなければなりません。
②サービスの登録
Windows起動時に自動でサービスが起動するようにします。サービス登録:pg_ctl register -D (DBクラスタパス) -N (登録サービズ名) -o "-p (ポート番号)"
サービス削除:pg_ctl unregister -N (登録サービズ名)
サービス削除:sc delete (登録サービズ名)
Windows再起動時にサービスが起動していたら設定完了です。
Linuxでも基本的に同じだと思います。Linux起動時にDBサーバ起動させるためには起動スクリプトを作ってあげないといけないと思いますが