複数の PostgreSQL クラスタ(インスタンス)を起動するで書いたように
Ubuntu 環境では、普通に apt-get
でインストールするだけで複数バージョンのPostgresqlを共存させる状況が整います。
しかし、macOS/Homebrew 環境ではちょっとした準備作業が必要となります。以下、その概略を説明します。
【重要な注意】 以下の手順では、いずれのコマンドも sudo
を付けずに実行してください。
【参考資料】 Macで複数のバージョンのPostgresqlを共存させる -- itmammoth 氏による 2016 年 3 月の記事。
SDK Headersのインストール(2019年1月追記)
macOS 10.14 (Mojave) を利用している場合は、次の手順で SDK Headers をインストールします。
- Finderで「ライブラリ」→「Developer」→「CommandLineTools」→「Packages」を開く。
- 「macOS_SDK_headers_for_macOS_10.14.pkg」をダブルクリックしてインストール。
【参考資料】
- https://github.com/petere/homebrew-postgresql/issues/44#issuecomment-451487767
- Mac - Finder のホームフォルダに「ライブラリ」フォルダを表示
インストール済みの PostgreSQL を無効化
まず、現在の環境に PostgreSQL がインストールされているかどうかを確認します。
$ brew search postgresql
リストの中にある postgresql
の右に ✔ アイコンが付いていればインストール済みです。次のコマンドで無効化します。
$ brew unlink postgresql
リポジトリの追加
リポジトリ petere/homebrew-postgresql
を追加します。
$ brew tap petere/homebrew-postgresql
postgresql-common
のインストール
$ brew install postgresql-common
PostgreSQL のインストール
インストール可能な PostgreSQL のバージョン番号は brew search postgresql
コマンドで調べられます。表示されたリストの中に petere/postgresql/postgresql@X
という項目があれば、バージョン X の PostgreSQL がインストール可能です。
例として、バージョン 9.6 と 10 をインストールしてみましょう。
$ brew install postgresql-9.6 $ brew install postgresql-10
もう一度 brew search postgresql
コマンドを実行し、petere/postgresql/postgresql@9.6
および petere/postgresql/postgresql@10
の右側に ✔ アイコンが付いていることを確認してください。
クラスタの作成
ここから先は Ubuntu 環境の場合とほぼ同じです。ただし、データディレクトリ、設定ファイルの置き場所、データベース postgres
の owner など、細かな違いがあります。繰り返しになりますが、すべてのコマンドを sudo
なしで実行してください(重要)。
さて、PostgreSQL 用語の「クラスタ」とは、ひとつの PostgreSQL サーバーインスタンスによって管理される複数のデータベースの集合体を意味します。ひとつの macOS 上で複数個のクラスタを同時に稼働させることができます。
PostgreSQL 9.6 のクラスタ main
と backup
を作成します。
$ pg_createcluster 9.6 main $ pg_createcluster 9.6 backup
さらに、PostgreSQL 10 のクラスタ main
を作成します。
$ pg_createcluster 10 main
合計で 3 個のクラスタが作られたことになります。クラスタの状態を確認します。
$ pg_lsclusters
すると、次のような結果が表示されます(一行が長いので一部省略しています)。
Ver Cluster Port Status Owner Data directory... 9.6 main 5433 down kuroda /usr/local/var... 9.6 backup 5434 down kuroda /usr/local/var... 10 main 5435 down kuroda /usr/local/var...
3番目の Port
列に着目してください。それぞれのクラスタに対応するサーバーインスタンスがどのポートを listen するかが書かれています。なお、5番目の Owner
列には、現在 macOS にログイン中のユーザー名が表示されます。
クラスタの起動
PostgreSQL 9.6 のクラスタ main
を起動します。
$ pg_ctlcluster 9.6 main start
クラスタの状態を確認します。
$ pg_lsclusters
すると、次のような結果が表示されます。
Ver Cluster Port Status Owner Data directory... 9.6 main 5433 online kuroda /usr/local/var... 9.6 backup 5434 down kuroda /usr/local/var... 10 main 5435 down kuroda /usr/local/var...
1 行目の Satus
列の値が down
から online
に変化しています。
同様に、他の 2 個のクラスタも起動します。
$ pg_ctlcluster 9.6 backup start $ pg_ctlcluster 10 main start
psql で接続確認
PostgreSQL 10 のクラスタ main
に psql で接続してみましょう。
$ psql --port=5435 postgres
--port
オプションでポート番号を、接続先データベースとして postgres
を指定しています。初期状態で存在する唯一のデータベースが postgres
です。オーナーは pg_createcluster を実行したユーザーです。
次のように出力されれば、成功です。
psql (10.2 (Homebrew petere/postgresql)) Type "help" for help. postgres=#
クラスタの停止
PostgreSQL 9.6 のクラスタ main
を停止するには、次のコマンドを実行します。
$ pg_ctlcluster 9.6 main stop
ポート番号などの変更
各クラスタの設定ファイルは /usr/local/etc/postgresql
ディレクトリの下にあります。PostgreSQL 10 のクラスタ main
の設定ファイルは、/usr/local/etc/postgresql/10/main
ディレクトリにあります。
ポート番号を変更したい場合は、エディタで postgresql.conf
を開き、port =
で始まる行を探して値を書き換えてください。設定を反映させるには、クラスタの再起動が必要です。