複数の PostgreSQL クラスタ(インスタンス)を起動する

PostgreSQLクラスタインスタンス)管理は、MySQLmysql_multi よりも簡単。

以下、Ubuntu 16.04 で行ったトライアルの結果。

クラスタの作成

$ sudo pg_createcluster --port=54321 9.6 abc
$ sudo pg_createcluster --port=54322 9.6 xyz

sudo -u postgres pg_createcluster ... のように postgres ユーザーで実行してもクラスタは作成される。 しかし、systemctl daemon-reload の実行ができないため警告が出る。root ユーザーで実行すべし。

これで、abcxyz というふたつのクラスタが作られる。データディレクトリは、つぎの通り:

  • /var/lib/postgresql/9.6/abc
  • /var/lib/postgresql/9.6/xyz

クラスタの名前に - 記号が使えない点に注意。

クラスタのリスト

$ pg_lsclusters

結果は、つぎのように表示される(一部省略)。

Ver Cluster Port  Status Owner    Data directory
9.6 abc     54321 online postgres /var/lib/postgresql/9.6/abc
9.6 main    5432  down   postgres /var/lib/postgresql/9.6/main
9.6 xyz     54322 online postgres /var/lib/postgresql/9.6/xyz

「Status」列の値が online であれば「起動中」、down であれば「停止中」。

クラスタの起動、停止、再起動、リロード

$ sudo systemctl start postgresql@9.6-abc
$ sudo systemctl stop postgresql@9.6-abc
$ sudo systemctl restart postgresql@9.6-abc
$ sudo systemctl reload postgresql@9.6-abc

systemctl が使えない環境では sudo pg_ctlcluster 9.6 abc start コマンド等を使用する。

psql ターミナルによる接続

$ sudo -u postgres psql --port 54321

--host オプションなしの場合、Unix ソケット /var/run/postgresql/.s.PGSQL.54321 経由での接続となる。

クラスタの削除

$ sudo pg_dropcluster --stop 9.6 abc

クラスタを停止して、削除する。具体的に削除されるのは、以下のディレクトリとファイル:

  • /etc/postgresql/9.6/abc
  • /var/lib/postgresql/9.6/abc
  • /var/log/postgresql/postgresql-9.6-abc.log*