Tech Racho エンジニアの「?」を「!」に。
  • 開発

Mac+HomebrewでPostgreSQLが起動しない場合の対応

小ネタかつ既出ですが、自分用にメモします。

  • macOS High Sierra
  • Homebrew 1.3.8

問題

PostgreSQLに接続しようとしたりpsqlを使おうとしたりすると、たまにソケットがないと言われて接続できないことがあります。
Macbookがフリーズして再起動した後に起きることがあるようです。

$ psql
psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

brew services listでチェックすると、PostgreSQLのステータスのstartedが赤く表示されています(正常の場合は緑)。

「コンソール」アプリを開くと、system.logで以下が延々と出力されています。

Dec 21 07:10:01 tori com.apple.xpc.launchd[1] (homebrew.mxcl.postgresql[34025]): Service exited with abnormal code: 1
Dec 21 07:10:01 tori com.apple.xpc.launchd[1] (homebrew.mxcl.postgresql): Service only ran for 0 seconds. Pushing respawn out by 10 seconds.
Dec 21 07:10:05 tori com.apple.xpc.launchd[1] (com.apple.preference.displays.MirrorDisplays): Service only ran for 0 seconds. Pushing respawn out by 10 

自分の場合、おそらくフリーズのタイミングでpostmaster.pidに傷が入ったと思われます。

解決方法

結局postmaster.pidを削除してサービスを再起動することで解決できました。Linux環境でも効くと思います。

$ rm /usr/local/var/postgres/postmaster.pid
$ brew services restart postgresql
Stopping `postgresql`... (might take a while)
==> Successfully stopped `postgresql` (label: homebrew.mxcl.postgresql)
==> Successfully started `postgresql` (label: homebrew.mxcl.postgresql)

復活しますた。

参考: Stackoverflow Postgres could not connect to server

追伸: 最近はPostgreSQL 9.6にpinしているのだけど、postmaster.pidのパスが/usr/local/var/postgresql@9.6に変わっている。

追記(2020/07/28)

postmaster.pidがないにもかかわらずHomebrewで起動しても緑にならない場合があります。この場合以下を実行してWALをリセットすると回復しました。

pg_resetwal /usr/local/var/postgres

参考: PostgreSQL DockerコンテナのWALが壊れて起動できない状態をpg_resetwalで起動できるように | Qrunch(クランチ)

関連記事

MacのhomebrewでOpenSSLがビルドエラーになる場合の対処方法


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。