もなかアイスの試食品

「とりあえずやってみたい」そんな気持ちが先走りすぎて挫折が多い私のメモ書きみたいなものです.

1台のPCで複数のPostgreSQLサーバ構築

開発環境が増えるたびに仮想OSが増えたりするので

1台のPCにDBサーバが複数起動出来たら便利だなぁーと思っていたのですが、

調べてみたら色々やり方が乗っていたのでまとめてみました。

ちなみに紹介する環境は Windows7 & PostgreSQL 9.2です。

正直あまりLinuxでもやることは変わらないと思いますが

大まかな手順

  1. 新しいデータベースクラスタ(以下DBクラスタ)の準備
  2. 設定ファイル(postgresql.conf)を編集
  3. サービスに登録

という感じになっています。

基本的にコマンドラインで操作していきますので、環境変数PathにPostgreSQLのパスが通ってると捗ります。

普通にインストールした場合だと、インストーラが勝手に登録していると思います。

DBクラスタの準備

DBクラスタとは、データベース格納領域です。

デフォルトでインストールしたなら「C:/Program Files/PostgreSQL/9.2/data」がDBクラスタです。

見ての通りただのディレクトリ・ファイルの集まりです。
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 (登録サービズ名)

ここでの新規DBクラスタパスは絶対パスで指定します。

Windows再起動時にサービスが起動していたら設定完了です。

Linuxでも基本的に同じだと思います。Linux起動時にDBサーバ起動させるためには起動スクリプトを作ってあげないといけないと思いますが


別ポートで1台のサーバでPostgreSQLを複数起動する方法 - bushimichiの日記別ポートで1台のサーバでPostgreSQLを複数起動する方法 - bushimichiの日記

第18回 データベースクラスタ|オススメ!OSS-DB情報|OSS-DB道場|受験対策|DBスペシャリストを認定する資格 OSS-DB技術者認定試験第18回 データベースクラスタ|オススメ!OSS-DB情報|OSS-DB道場|受験対策|DBスペシャリストを認定する資格 OSS-DB技術者認定試験