PostgreSQLでの『could not connect to server』エラーの解決方法

PostgreSQLでの『could not connect to server』エラーの解決方法

このエラーは、PostgreSQLサーバーにクライアントが接続できない場合に発生する。原因は多岐にわたり、サーバーが起動していない、ポート設定の誤り、ファイアウォールによるブロック、ホストの誤指定、認証設定ミスなどが考えられる。発生条件とともに、原因別に細かく対処法を整理する。

エラーの基本メッセージと発生条件

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 postgresql

inactivedead になっている場合、接続できない。

解決策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.conflisten_addresseslocalhost* になっていないと外部やローカル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: 正しいホストを指定する

localhost127.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 bindconnection refused などの詳細な情報が記録されている。

まとめ

『could not connect to server』エラーは、PostgreSQLのサーバーが実行中であること、適切なネットワーク・認証・設定ファイルが整っていることを確認することでほとんどの場合解決可能。環境差異や複数バージョンの混在も原因になりうるため、各設定ファイルとログの確認が重要。