はじめに
M2でSonomaなMacにPostgreSQL 16.1(公開されてから何日後?)をインストールしてみます。PostgreSQLが依存するソフトはHomebrewでインストールするものの、PostgreSQL自身だけはソースからインストールするという逸般の誤家庭向けの方法です。あと、(無駄な努力な気がしますが)既存の環境にはできるだけ影響を与えないようにしています。
一般のご家庭向けには
こんな記事を読んでないで https://www.postgresql.org/download/macosx/ から好みの方法を選択してバイナリーをダウンロードすれば良いと思います。もしかしたらバージョンが少し古いかもしれませんが、そのバージョンの違いが深刻な問題を引き起こすことはないでしょうから。
手順
ソースを入手
https://www.postgresql.org/ftp/source/v16.1/ からダウンロードします。最後がbz2のものとgzのものがありますが、お好きな方で。単なる圧縮形式の違いです。(bz2の方がサイズが小さいということは圧縮効率が良いということですね。でも今の時代この程度のサイズの差を気にする人はいないような、、、)
shasum -a 256 ~/Downloads/postgresql-16.1.tar.bz2
とかやって https://ftp.postgresql.org/pub/source/v16.1/postgresql-16.1.tar.bz2.sha256 と比較してもいいかもしれません。改竄のチェックですね。(何も考えていないので、~/Downloadsにダウンロードされています。)
展開
展開します。
tar jxvf ~/Downloads/postgresql-16.1.tar.bz2
gzだとオプションの指定が少し変わりますね。
これをやるとカレントディレクトリに展開されますが、postgresql-16.1という名前のディレクトリの下に展開されますので、カレントディレクトリがいい加減でもそれほど悲惨な事態にはならないでしょう。
依存ライブラリのインストール
Homebrewでicu4cをインストールしておきます。Homebrewの説明はここではしません。(それ以外も必要かもしれませんが、私の手元の環境では既に入っているものでしたので、、、gettext関連かな)
configure
下のconfigure --enable-nlsとどちらか一方だけでいいです。エラーメッセージとかが英語のままでいいよ、という方はこちらで。
PKG_CONFIG_PATH="/opt/homebrew/opt/icu4c/lib/pkgconfig:$PKG_CONFIG_PATH"
./configure
こちらは私にとっての本命ではないので、実はconfigureが正常に終了することを確認しただけで、makeが動作するかどうかは確認していません。もしかしたらconfigure --enable-nlsと同じように
CPPFLAGS="-I/opt/homebrew/include" LDFLAGS="-L/opt/homebrew/lib"
も指定しないといけないのかもしれません。
configure --enable-nls
日本人ならもちろんエラーメッセージも日本語だろ、という方はこちらで。そうでない方は上のconfigureで。
PKG_CONFIG_PATH="/opt/homebrew/opt/icu4c/lib/pkgconfig:$PKG_CONFIG_PATH"
CPPFLAGS="-I/opt/homebrew/include" LDFLAGS="-L/opt/homebrew/lib" ./configure --enable-nls
configureはPKG_CONFIG_PATH="/opt/homebrew/opt/icu4c/lib/pkgconfig:$PKG_CONFIG_PATH"を指定するだけで正常に終わったのですが、makeでうまくいきませんでした。そのためCPPFLAGSとLDFLAGSを追加で指定しています。
make
make -j 12
jの次の値はお好きな値で。何も値を指定しない、という方法もあるようです。並列実行数なのでCPUと同じ程度の値を指定するといい感じと聞いたような記憶があります。適切に大きな値を指定すれば、「うおお、M2 Mac速い!!!」(※個人の感想です)と一人悦に入ることができるという副作用が期待できます。
動作確認
sudo make install
make check
気分的にはcheckしてからinstallしたいところですが、先にインストールをしておかないとcheckが動かないので。
(省略)
# All 215 tests passed.
と表示されれば動作しています。
とにかく動かす
この時点では何も設定していないのですから、データベースとしてまともな動作はするはずもないのですが、とにかく動かしてみましょう。
$ /usr/local/pgsql/bin/psql
psql: エラー: ソケット"/tmp/.s.PGSQL.5432"のサーバーへの接続に失敗しました: No such file or directory
サーバーはローカルで稼働していてそのソケットで接続を受け付けていますか?
はい、エラーメッセージが日本語で表示されました。めでたし、めでたし。
おことわりなど
恒例のお断りですが、この文章の内容は、筆者が所属している会社・団体とは一切関わりがありません。いわゆる「自主的な研究の成果の発表」というものです。
また、「逸般の誤家庭」ならそもそもHomebrewなんて使わずにすべてソースから構築だろ、という見解もあるかと思いますが、私はそこまで漢(おとこ)ではありません。