psql: could not connect to server: Connection refused Is the server running on host "hoge" and accepting TCP/IP connections on port 5432?

PostgreSQLで、クライアントとサーバを別マシンで動かしたい場合、接続しようとして下記のようなエラーが出ることがあります。
psql: could not connect to server: Connection refused
        Is the server running on host "servername" and accepting
        TCP/IP connections on port 5432?
この場合の対処法を解説します。

ポート5432は空いてるか?

そもそもポートが空いてないと通信できません。
iptablesやファイアーウォールの設定を確認してポートを空けましょう。

ポートが空いてるかは、クライアントマシンからtelnetで確認できます。

クライアントマシンで
$ telnet serverhoge 5432
Trying xx.xxx.x.xxx...
telnet: connect to address xx.xxx.x.xxx: Connection refused
"Connection refused"と出る場合は、サーバ側のポートが閉じていると考えられます。

ポートを空けてやると、エラー表示が下記のように"No route to host"になるはずです。
$ telnet serverhoge 5432
Trying xx.xxx.x.xxx...
telnet: connect to address xx.xxx.x.xxx: No route to host

postgresql.confの設定

デフォルトではlisten_addressが"localhost"になっているので、他ホストからのアクセスは受け付けていないです。
Listen対象にサーバのIPアドレスを追加しましょう。
listen_addresses = 'localhost,10.100.123.456' 
※クライアントのIPを書くのではなくて、サーバのIPを書きます。

pg_hba.confの設定

pg_hba.confを編集して、認証方式、DB名、ユーザ名、IPアドレスなどを設定します。
詳細な設定方法は公式マニュアルを見てください。

下記はあくまで一例です。
#クライアント10.100.111.111からのTCP接続を許可する
host    all         all      10.100.111.111/32       md5

サーバの再起動

/etc/init.d/postgresql restart
カテゴリ:

人気記事