PostgreSQL(Homebrew)接続エラー「psql: could not connect to server: No such file or directory」の解決策
macOS, PostgreSQL, Homebrewで接続できない問題の解決方法
問題概要
原因
この問題は、いくつかの原因が考えられる。
- PostgreSQLが起動していない:
brew services list
コマンドで確認し、起動していない場合はbrew services start postgresql
で起動する。 - 接続情報が間違っている:
psql
コマンドを実行する際に、ユーザー名、パスワード、データベース名などを間違っていないか確認する。 - ポート番号が間違っている: PostgreSQLはデフォルトで5432ポートを使用するが、設定によって変更されている可能性がある。
brew info postgresql
コマンドで確認し、必要に応じてポート番号を指定する。 - ファイアウォールが接続を遮断している: macOS標準のファイアウォールや、他のセキュリティソフトによって接続が遮断されている可能性がある。ファイアウォールの設定を確認し、必要に応じてPostgreSQLへの接続を許可する。
- pidファイルが破損している: HomebrewでインストールしたPostgreSQLは、
/opt/homebrew/var/postgres/postgres.pid
というファイルにプロセスIDを保存する。このファイルが破損していると、接続できないことがある。
解決方法
上記の原因を順番に確認し、該当する解決方法を実行する。
PostgreSQLの起動確認
$ brew services list
出力結果に postgresql
があり、Status
が started
になっていることを確認する。
起動していない場合は、以下のコマンドで起動する。
$ brew services start postgresql
接続情報の確認
psql
コマンドを実行する際に、以下の情報を正しく指定していることを確認する。
- ユーザー名: デフォルトは
postgres
- パスワード: インストール時に設定したパスワード
以下のコマンド例のように、オプションを指定して接続情報を明示的に指定することもできる。
$ psql -U postgres -W -h localhost -p 5432 postgres
-U
: ユーザー名-W
: パスワードをプロンプトで入力-h
: ホスト名 (デフォルトはlocalhost
)-p
: ポート番号 (デフォルトは5432
)postgres
: データベース名
ポート番号の確認
brew info postgresql
コマンドで、PostgreSQLのインストール情報を確認する。
$ brew info postgresql
出力結果に LISTEN
という項目があり、ポート番号が記載されている。
デフォルト以外のポート番号を使用している場合は、psql
コマンド実行時に -p
オプションでポート番号を指定する必要がある。
ファイアウォールの確認
macOS標準のファイアウォールであるpf
が有効になっている場合は、以下のコマンドでPostgreSQLへの接続を許可する。
$ sudo pfctl -a input -p tcp -m port 5432 -j accept
上記のコマンドは、5432ポートへのTCP接続を許可する設定を追加する。
他のセキュリティソフトを使用している場合は、そのソフトの設定画面でPostgreSQLへの接続を許可する必要がある。
pidファイルの破損確認
/opt/homebrew/var/postgres/postgres.pid
ファイルが存在し、内容が数字のみであることを確認する。
ファイルが存在しないか、内容が破損している場合は、以下のコマンドで初期化する。
$ brew services restart postgresql
上記のコマンドは、PostgreSQLを再起動し、pidファイルを初期化する。
その他の解決方法
上記の方法で解決できない場合は、以下の情報を調べて解決策を探してみる。
- PostgreSQLのログ:
/opt/homebrew/var/log/postgres/postgres.log
ファイルに、接続エラーに関する情報が記録されている可能性がある。
上記の解決方法を参考に、問題を解決し、PostgreSQLに接続できるよう
接続情報の確認
# デフォルトの接続情報で接続
$ psql
# ユーザー名とパスワードを指定して接続
$ psql -U postgres -W
# ホスト名とポート番号を指定して接続
$ psql -U postgres -W -h localhost -p 5432
# データベース名を指定して接続
$ psql -U postgres -W -d my_database
ポート番号の確認
# PostgreSQLのインストール情報を確認
$ brew info postgresql
ファイアウォールの確認
# macOS標準のファイアウォールでPostgreSQLへの接続を許可
$ sudo pfctl -a input -p tcp -m port 5432 -j accept
pidファイルの破損確認
# pidファイルの存在と内容を確認
$ cat /opt/homebrew/var/postgres/postgres.pid
# pidファイルを初期化
$ brew services restart postgresql
上記は基本的なサンプルコードです。具体的な状況に合わせて、コードを修正する必要があります。
macOS, PostgreSQL, Homebrewで接続できない問題の解決方法 - 他の方法
postgresql.confファイルの編集
- listen_addresses: 接続を受け付けるIPアドレスを設定する。デフォルトは
localhost
になっているが、*
に変更すると、すべてのIPアドレスからの接続を受け付けるようになる。 - port: ポート番号を設定する。デフォルトは
5432
になっているが、他のポート番号を使用したい場合は、こちらを変更する。
設定を変更したら、PostgreSQLを再起動する。
$ brew services restart postgresql
pg_hba.confファイルの編集
# IPv4からの接続を許可
host all all 0.0.0.0/0 md5
# IPv6からの接続を許可
host all all ::/0 md5
上記の設定例は、すべてのIPアドレスからの接続を許可する例です。
$ brew services restart postgresql
PostgreSQLの再インストール
上記の方法で解決できない場合は、PostgreSQLを再インストールしてみる。
$ brew uninstall postgresql
$ brew install postgresql
データベースの復元
PostgreSQLを再インストールすると、データベースが消えてしまう。
データベースを復元したい場合は、以下のコマンドを実行する。
$ brew services stop postgresql
$ pg_restore -d postgres -c /path/to/backup.dump
$ brew services start postgresql
上記のコマンドは、/path/to/backup.dump
ファイルからデータベースを復元する例です。
macos postgresql homebrew