PostgreSQLでの『could not connect to server』エラーの解決方法
- 作成日 2025.05.30
- PostgreSQL
- PostgreSQL
このエラーは、PostgreSQLサーバーにクライアントが接続できない場合に発生する。原因は多岐にわたり、サーバーが起動していない、ポート設定の誤り、ファイアウォールによるブロック、ホストの誤指定、認証設定ミスなどが考えられる。発生条件とともに、原因別に細かく対処法を整理する。
- 1. エラーの基本メッセージと発生条件
- 2. 原因1: PostgreSQLサーバーが起動していない
- 3. 解決策1: サーバーを起動する
- 4. 原因2: ソケットファイルの場所が違う
- 5. 解決策2: ソケットの実パスを確認して接続する
- 6. 原因3: TCP/IP接続が有効化されていない
- 7. 解決策3: listen_addressesを設定する
- 8. 原因4: ファイアウォールやポートブロック
- 9. 解決策4: ファイアウォール設定を確認・開放する
- 10. 原因5: ホスト名またはIPアドレスの間違い
- 11. 解決策5: 正しいホストを指定する
- 12. 原因6: pg_hba.confの設定ミス
- 13. 解決策6: pg_hba.conf を適切に設定する
- 14. 原因7: 接続先のポート番号が異なる
- 15. 解決策7: 正しいポート番号を指定する
- 16. 原因8: ログを確認して詳細を特定する
- 17. まとめ
エラーの基本メッセージと発生条件
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?または以下のようなTCP接続エラーもある:
psql: 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?このエラーは以下の条件で発生する:
- サーバープロセスが起動していない
- 指定されたソケットファイルが存在しない
- TCP/IP接続が許可されていない
- ホストやポート番号の指定ミス
- ファイアウォールやネットワークのブロック
pg_hba.confの設定不備
原因1: PostgreSQLサーバーが起動していない
sudo systemctl status postgresqlinactive や dead になっている場合、接続できない。
解決策1: サーバーを起動する
sudo systemctl start postgresql
-- または OSにより
pg_ctl start -D /usr/local/var/postgres起動後、再度 psql で接続を試みる。
原因2: ソケットファイルの場所が違う
PostgreSQLはデフォルトでUnixドメインソケットを /var/run/postgresql/ に作成するが、環境によっては /tmp など別の場所にあることがある。
psql -h /tmp -d dbnameこのように -h にソケットのパスを明示することで接続できる場合がある。
解決策2: ソケットの実パスを確認して接続する
sudo find / -name ".s.PGSQL.5432"
-- 結果に応じて接続先を指定
psql -h /実パス -d dbname原因3: TCP/IP接続が有効化されていない
PostgreSQLの設定ファイル postgresql.conf で listen_addresses が localhost や * になっていないと外部やローカルTCP経由で接続できない。
解決策3: listen_addressesを設定する
# postgresql.conf
listen_addresses = '*'
port = 5432変更後はサーバーの再起動が必要。
sudo systemctl restart postgresql原因4: ファイアウォールやポートブロック
ネットワーク経由で接続する場合、5432番ポートが開いていないと通信できない。
解決策4: ファイアウォール設定を確認・開放する
# UFWの例(Ubuntu)
sudo ufw allow 5432/tcp
<h1>firewalldの例(CentOS/RHEL)</h1>
sudo firewall-cmd --add-port=5432/tcp --permanent
sudo firewall-cmd --reload原因5: ホスト名またはIPアドレスの間違い
psql -h 127.0.0.1 -p 5432 -U postgres -d mydb
-- ホスト名を誤って指定していると接続不可DNS解決できないホスト名を指定していたり、IPを間違えている場合もエラーになる。
解決策5: 正しいホストを指定する
localhost や 127.0.0.1、外部サーバーならグローバルIPまたはFQDNを正しく指定する。
原因6: pg_hba.confの設定ミス
接続を許可するクライアント情報が pg_hba.conf に記載されていないと認証エラー以前に接続が拒否される。
解決策6: pg_hba.conf を適切に設定する
# pg_hba.conf の一例
host all all 127.0.0.1/32 md5
host all all ::1/128 md5編集後は再読み込みが必要:
sudo systemctl reload postgresql
-- または
pg_ctl reload原因7: 接続先のポート番号が異なる
複数バージョンのPostgreSQLがインストールされている環境では、デフォルトの5432ではなく5433や5434で待ち受けていることがある。
解決策7: 正しいポート番号を指定する
# サーバー設定を確認
SHOW port;
# またはコマンドラインで指定
psql -h localhost -p 5433 -U postgres -d mydb原因8: ログを確認して詳細を特定する
sudo tail -n 100 /var/log/postgresql/postgresql-14-main.log
-- ディストリビューションによってログのパスは異なるログには FATAL: や could not bind、connection refused などの詳細な情報が記録されている。
まとめ
『could not connect to server』エラーは、PostgreSQLのサーバーが実行中であること、適切なネットワーク・認証・設定ファイルが整っていることを確認することでほとんどの場合解決可能。環境差異や複数バージョンの混在も原因になりうるため、各設定ファイルとログの確認が重要。
-
前の記事
MySQLでの『エラー1364: Field Doesn’t Have a Default Value』を解決する方法 2025.05.30
-
次の記事
NetworkError: Fetch operation failed の解決方法 2025.05.30
コメントを書く