エラー解決の記録です。
エラー内容
PostgreSQLをインストールして初めてデータベースに接続するときに、
% brew services start postgresql
==> Successfully started `postgresql`(label:homebrew.mxcl.postgresql)
% brew services list
Name Status User File
postgresql error 19968 <usename> ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
% psql postgresql
psql: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: No such file or directory
Is the server running locally and accepting connections on that socket?
という状況になりました。
postgresqlがSuccessfully startedとは書いてあるけれども、実際のStatusはerrorで、psqlコマンドで接続しようとするとコネクションエラーになっています。
Homebrewのコマンドを使わずに、
% postgres -D /usr/local/var/postgres/
でPostgreSQLを起動すると、別アプリのターミナルからpsqlコマンドで接続することはできたので、Homebrewのコマンドで起きる問題だと考えました。
解決方法
- /usr/local/var/log/postgres.log への [username] のアクセス権限を「読み出しのみ」から「読み/書き」に変更する
アクセス権限を変えた直後にbrew services list
を実行すると
% brew services list
Name Status User File
postgresql started <username> ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
このようにStatusがstartedに変わり、psqlコマンドでの接続もできるようになりました。
考えられる原因
実は、この記事の問題として取り上げているエラーが出る前に、下記のような別の種類のエラーが出ていました。
% brew services start postgresql
Error: Permission denied @ rb_sysopen - /Users/<username>/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
これを下記の操作で解決したので、
% sudo chown <username> /Users/<username>/Library/LaunchAgents/
私はこの後もsudo
を付けずに([username]として)brew services start postgresql
を実行していくことになります。
その後に、この記事冒頭の状態に移っています。
また、brew services start postgresql
で使う↓このファイルは、
~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
↓このファイルへアクセスしているようです。
/usr/local/var/log/postgres.log
合わせて考えると、原因はログファイルへの書き込み権限を持っていないユーザーでPostgreSQLを起動しようとしたことではないでしょうか。
ログファイルへの[username]のアクセス権限を「読み出しのみ」に戻すとエラーを再現できるので、この推測は正しいのではないかと思っています。
教訓
あるファイルのオーナー権限やアクセス権限を変えて何かを解決したときは、そこからつながるファイルへのアクセス権限も変えなければならない(ときもある)。
エラー解決のために参考にしたWebサイトは下記です。
Homebrewでインストールしたpostgresqlが起動しないのを調べた
Permission denied error when trying to run postgresql on Homebrew