小ネタかつ既出ですが、自分用にメモします。
- 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(クランチ)