【PostgreSQL接続トラブル】ポート5432拒否を徹底解決!原因と解決策を完全網羅
PostgreSQL に接続できない問題:ポート 5432 での接続拒否を解決する方法
- PostgreSQLサーバーに接続できない
- エラーメッセージ:「psql: could not connect to server: Connection refused Is the server running on host "localhost" and accepting TCP/IP connections on port 5432?」
- 主な原因:ポート 5432 での接続が拒否されている
解決策:
以下の3つのステップで、問題を段階的に診断・解決していきます。
ステップ1:PostgreSQLサーバーが起動していることを確認
- コマンドプロンプトを開きます。
- 以下のコマンドを実行します。
pg_ctl status
- 以下の出力が表示されれば、サーバーは起動しています。
pg_ctl: (pg_ctl) PostgreSQL server running
- サーバーが起動していない場合は、以下のコマンドで起動します。
pg_ctl start
ステップ2:ファイアウォールが PostgreSQL の通信を許可していることを確認
ファイアウォールが PostgreSQL サーバーへの接続をブロックしている可能性があります。
-
Windowsの場合:
- コントロールパネルを開きます。
- 「Windows ファイアウォール」>「詳細設定」>「受信の規則」へ移動します。
- 「新しい規則」をクリックします。
- 「ポート」を選択し、「次へ」をクリックします。
- ローカルおよびリモートポートに「5432」を入力し、「TCP」を選択します。
- 接続の種類とプロファイルを選択し、「完了」をクリックします。
-
Macの場合:
- 「システム環境設定」を開きます。
- 「セキュリティとプライバシー」>「ファイアウォール」へ移動します。
- ファイアウォールをオンにします。
- 「ファイアウォールオプション」をクリックします。
- 「ポート」タブを選択します。
- サービスポートに「5432」を入力し、「プロトコル」で「TCP」を選択します。
ステップ3:pg_hba.conf ファイルで接続を許可していることを確認
pg_hba.conf ファイルには、PostgreSQLサーバーへの接続を許可するクライアントと方法が定義されています。
- pg_hba.conf ファイルの場所を確認します。
- ファイルをエディタで開きます。
- 以下の行を追加します。
host all all 0.0.0.0/0 md5
- ファイルを保存して閉じます。
pg_ctl restart
補足:
- 上記の方法は、PostgreSQLサーバーがローカルマシンにインストールされている場合を想定しています。
- サーバーが別のマシンにある場合は、接続先マシンのIPアドレスとポート番号を指定する必要があります。
- 認証方式を「md5」以外に設定する場合は、パスワード設定も忘れずに変更してください。
- 問題が解決しない場合は、ログファイルを確認するか、専門家に相談することをお勧めします。
pg_ctl status
# コントロールパネルを開く
# 「Windows ファイアウォール」>「詳細設定」>「受信の規則」へ移動
# 「新しい規則」をクリック
# 「ポート」を選択し、「次へ」をクリック
# ローカルおよびリモートポートに「5432」を入力し、「TCP」を選択します。
# 「許可する」を選択し、「次へ」をクリック
# 接続の種類とプロファイルを選択し、「完了」をクリック
# 「システム環境設定」を開く
# 「セキュリティとプライバシー」>「ファイアウォール」へ移動
# ファイアウォールをオンにします。
# 「ファイアウォールオプション」をクリックします。
# 「ポート」タブを選択します。
# 「+」ボタンをクリックします。
# サービスポートに「5432」を入力し、「プロトコル」で「TCP」を選択します。
# 「追加」をクリックします。
Linuxの場合
# 使用しているファイアウォールに応じて設定方法が異なります。
# 一般的なファイアウォール (UFW、iptables など) の設定方法は、以下のリソースを参照してください。
# * [UFW 設定方法](https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu)
# * [iptables 設定方法](https://docs.virtuozzo.com/virtuozzo_hybrid_server_7_users_guide/advanced-tasks/managing-iptables-modules.html)
# pg_hba.conf ファイルの場所を確認します。
# * デフォルトの場所は、`/etc/postgresql/<postgresql_version>/pg_hba.conf` です。
# ファイルをエディタで開きます。
# 以下の行を追加します。
host all all 0.0.0.0/0 md5
# ファイルを保存して閉じます。
# PostgreSQLサーバーを再起動します。
pg_ctl restart
既にご確認・実施済み:
- ファイアウォール設定による通信許可確認
- pg_hba.conf ファイルの設定確認
上記を確認済みにもかかわらず、問題が解決しない場合:
考えられる原因と解決策:
ユーザー権限の問題:
- 接続しようとしているユーザーが、PostgreSQLサーバーへのアクセス権を持っていることを確認してください。
- 必要に応じて、
pg_hba.conf
ファイルで適切な権限を付与する必要があります。
ネットワーク構成の問題:
- サーバーとクライアントマシンが同じネットワーク上にあることを確認してください。
- ファイアウォール以外のネットワークデバイス (ルーターなど) が、PostgreSQLサーバーへの通信をブロックしていないことを確認してください。
- IP アドレスによる接続制限が設定されていないことを確認してください。
postgresql.conf
ファイルで、listen_addresses パラメーターが適切に設定されていることを確認してください。- サーバーが、クライアントからの接続を許可するように設定されていることを確認してください。
- TCP/IP 接続を無効にしていないことを確認してください。
クライアント側の問題:
- 使用している PostgreSQL クライアントが、正しいバージョンであることを確認してください。
- クライアントの設定が、サーバーの設定と一致していることを確認してください。
- クライアントとサーバー間の接続に、ホスト名ではなくIPアドレスを使用してみてください。
破損または不完全なインストール:
- PostgreSQLサーバーが破損または不完全にインストールされている可能性があります。
- サーバーを再インストールするか、破損したファイルを修復する必要がある場合があります。
専門家のサポート:
上記の方法で問題が解決しない場合は、PostgreSQL コミュニティフォーラムや専門家に相談することをお勧めします。
問題解決に向けて、以下の情報があると助かります:
- 使用している PostgreSQL のバージョン
- 使用しているオペレーティングシステム
- ファイアウォールソフトウェア
- エラーメッセージの詳細
postgresql ssh port