【エラー対応Rails編】PG::ConnectionBadが出た時の対処方法

今回は、PostgreSQLが上手く立ち上がらない場合の対処方法について紹介していきます。

ある日Macがフリーズしたので、PostgreSQLを終了せずにシャットダウンしてから、再度サーバーを立ち上げるとこのようなエラーが出てしまいました。


エラーの内容を拡大するとこんな感じです。
ファイルが無い、もしくは既に別のサーバーが既に動いてるくない?

みたいな感じです。

Postgres PG::ConnectionBad: 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”?


原因:PostgreSQLを正しく終了していない


PostgreSQLを終了させる際は、必ずターミナルでCtr + Cを押してサーバーを終了させなければいけなかったのですが、それをやっていませんでした。

結論:PostgresSQLを再起動

これはPostgreSQLを再起動すれば解決します。
ターミナルで上から順番に実行してください。

ターミナル
ターミナル

下の#の部分はコメントだから、入力しないでね。


#PostgreSQLを自動起動するように設定
$ brew services start postgresql

#PostgreSQLの自動起動を解除
$ brew services stop postgresql

#PostgreSQLを再起動
$ brew services restart postgresql


意味も分からず、ただコマンドを打つだけでは勉強にならないと思うので、コマンドについてざっくりと説明しておきますね。

そもそも「brew~」って何?

先頭のbrewは、パッケージを管理できるHomebrewというシステムを使って操作していることを意味します。

パッケージとは、便利なアプリみたいな感じと思ってください。

Homebrewを使えば、こんなことができるので人気なのです。

・プログラミングに必要なパッケージをインストールしたりアンインストールしたりできる!

パッケージのアップデートをまとめて行える!


実際にターミナル上で、brewコマンドを使う際は、下のようにbrewの後ろに「install」や「uninstall」などのコマンドを続けて実行します。

#パッケージのインストール

$brew install パッケージ名

#パッケージのアンインストール
$brew uninstall パッケージ名

「services」とか「start」って何?

Homebrewにはservicesという便利なコマンドが備わっています。
mac OSを起動すると同時に、パッケージを常に起動させる場合は、

$brew services start パッケージ名


上の常時起動を解除したい場合は、

$brew services stop パッケージ名


パッケージの再起動したい場合は、

$brew services restart パッケージ名


postmaster.pidが残っててもエラーが出る場合あり

今回は問題なかったのですが、postmaster.pidファイルが残っていることでエラーが出る場合があるようです。

ただこれはファイルを消してやるだけで簡単に解決します。

cdコマンドで、postgresディレクトリへ移動する

まずターミナルもしくはFinderでpostgresディレクトリへ移動します。

ターミナル
ターミナル

ターミナルの移動コマンドをちゃんと使えてる?



指定のディレクトリに移動したい場合は、cdコマンドを使います。
現在、ホームディレクトリにいる場合、以下のようにターミナルで実行してください。($の後を実行してくださいね!)

XXXXXXMacBook:~ ユーザー名$ cd /usr/local/var/postgres


lsコマンドで、postgresの中身を確認

ホームディレクトリからpostgresディレクトリへ移動できました。


ただ、そもそもpostgresディレクトリにファイルが無いかもしれないのでディレクトリの中身を確認しましょう。


ディレクトリの中身の確認は、lsコマンドですね。

XXXXXX:postgres ユーザー名$ ls

そうすると、下のようにファイルの一覧を見ることができます。

PG_VERSION		pg_notify		pg_wal
base			pg_replslot		pg_xact
global			pg_serial		postgresql.auto.conf
pg_commit_ts		pg_snapshots		postgresql.conf
pg_dynshmem		pg_stat			postmaster.opts
pg_hba.conf		pg_stat_tmp		postmaster.pid
pg_ident.conf		pg_subtrans		postmaster.pid_bak
pg_logical		pg_tblspc
pg_multixact		pg_twophase


ターミナル
ターミナル

postmaster.pidがあるよ!


rmコマンドで、postmaster.pidを削除

postmaster.pidファイルがあれば、rmコマンドで削除してあげます。

$rm postmaster.pid

これでOKです。
一度ターミナルを再起動して試してみましょう!!

まとめ

最後に今回の記事のまとめをしておきます。
サーバー立ち上げ時に、PG::ConnectionBadが出た場合は、以下を試してみましょう。

[1] PostgreSQLを再起動する
[2] Postmaster.pidを削除する


参考文献

海外のサイトを直訳しているので、多少日本語がおかしいですが参考になります

PG :: ConnectionBad – サーバーに接続できませんでした:接続が拒否されました

Rails 4.0サーバーを起動するたびに、この出力が表示されます。 Started GET “/” for 127.0.0.1 at 2013-11-06 23:56:36 -0500 PG::ConnectionBad – could not connect to server: Connection refused Is the server running on Host “localhost” (::1) and accepting TCP/IP connections on port 5432? could not connect to server: Connection refused Is the server running on Host “localhost” (127.0.0.1) and accepting TCP/IP connections on port 5432?

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です