@kyanny's blog

My thoughts, my life. Views/opinions are my own.

Homebrew でインストールした postgresql に接続できないときの原因と対処法

blog.kyanny.me

こういうやつ。類似の質問がたくさんある。

postgresql - Socket File "/var/pgsql_socket/.s.PGSQL.5432" Missing In Mountain Lion (OS X Server) - Stack Overflow http://stackoverflow.com/questions/13868730/socket-file-var-pgsql-socket-s-pgsql-5432-missing-in-mountain-lion-os-x-ser

こういうエラーがでて psql で接続できない場合

psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?
原因と対処法その一

Homebrew でインストールする以前から postgresql がインストールされていることがある。 $PATH の設定次第で /usr/local/bin/psql ではなく /usr/bin/psql にパスが通っていたりする。 /usr/bin/psql と Homebrew でインストールした postgresql では Unix domain socket のパスが異なっていて接続エラーになる、みたいなことが起こりうる。

対処法としては、 /usr/local/bin/psql とフルパスで実行するか、 export PATH=/usr/local/bin:$PATH として psql コマンドのパスを変更する。

原因と対処その二

Rails アプリケーションから pg gem で postgresql に接続している場合、Homebrew で postgresql をインストールする前に pg gem を(システムに元からインストールされてた postgresql に対して)インストールし、その後 Homebrew で postgresql をインストールして起動、 Rails アプリケーションを起動しようとすると接続エラーが発生することがある。

対処法としては、 gem uninstall pg でインストールされてる pg gem を(バージョン違いで複数あれば全て)削除し、その後改めて gem install pg なり bundle install なりしてインストールしなおす。

原因と対処その三

Homebrew で postgresql 9.3 から 9.4 にアップグレードするとデータベースのデータ形式が変更されたらしく、データのマイグレーションをしないとデータベースサーバを起動できない。探せば公式のマイグレーション手順ドキュメントが見つかる。

開発環境用のデータベースなのでマイグレーション不要な場合の対処法としては、postgresql サーバを停止したあと rm -rf /usr/local/var/postgres なり mv /usr/local/var/postgres /tmp/postgres なりしたあと brew reinstall --force postgres すると /usr/local/var/postgres を新しいバージョンで initdb しなおしてくれるので、 postgresql を起動しなおして Rails アプリケーションから rake db:create なり rake db:setup なりすればよい。