今週から新しいプロジェクトに参加することになった。 Rails + postgres の構成で動くアプリケーションの環境構築をした。

 ミドルウェアを使うときはコンテナで実行するのが手癖になっていた。しかし今回は「無理して Docker を使わないこと」のポリシーに沿うことにした。実際、プロジェクトの依存関係の知識を持たないまま docker で環境構築をしようというのは、どれだけ時間がかかるか見積もれない。

 こうして久しぶりに postgres を macOS で動かして使うことにした。そのときの記録を書く。

TL;DR

% brew postgresql-upgrade-database

 みると brew でインストール済みのようだったので、まずはバージョンを確認する。

% postgres --version
# => postgres (PostgreSQL) 12.3

 これをそのまま起動してみようとすると、以下のようになる。どうやら postgresql@11 で作成したファイルが残っており、 postgresql@12 では起動できない様子。

% postgres
2020-07-06 05:39:58.529 CEST [91445] FATAL:  database files are incompatible with server
2020-07-06 05:39:58.529 CEST [91445] DETAIL:  The data directory was initialized by PostgreSQL version 11, which is not compatible with this version 12.3.~~~ 


 おそらくどこかのタイミングで、考えなしにメジャーアップデートを受け入れてしまっていたよう。使っていなかったものだからここまで気がつかなかった。

 何か情報がないかと brew info に尋ねてみる。と、幸いにもすぐに見つかった。

~~~ bash
% brew info postgres
...
==> Caveats
To migrate existing data from a previous major version of PostgreSQL run:
brew postgresql-upgrade-database
...~~~ 


 ドンピシャだから、これを実行して、ふたたび起動してみる。

~~~ bash
% brew postgresql-upgrade-database
% postgres
2020-07-06 12:49:00.620 JST [93259] LOG:  starting PostgreSQL 12.3 on x86_64-apple-darwin19.4.0, compiled by Apple clang version 11.0.3 (clang-1103.0.32.59), 64-bit
2020-07-06 12:49:00.621 JST [93259] LOG:  listening on IPv6 address "::1", port 5432
2020-07-06 12:49:00.621 JST [93259] LOG:  listening on IPv4 address "127.0.0.1", port 5432
2020-07-06 12:49:00.622 JST [93259] LOG:  listening on Unix socket "/tmp/.s.PGSQL.5432"
2020-07-06 12:49:00.634 JST [93260] LOG:  database system was shut down at 2020-07-06 12:48:31 JST
2020-07-06 12:49:00.638 JST [93259] LOG:  database system is ready to accept connections

 こうして無事にローカルの postgres が利用可能になった。やや面倒ではあったが、それでも docker でセコセコ定義していくよりは圧倒的に早く済んだ印象がある。これはこれで気持ちがいい。