CentOS6にyumコマンドを利用してPostgreSQLをインストールしました。
早速、以下のようにpsqlコマンドでlocalhostと設定したら接続できません。
[sakura@centos6 ~]$ psql -h localhost psql: FATAL: ホスト"::1"、ユーザ"sakura"、データベース"sakura、SSL無効用のエントリがpg_hba.confにありません。
以前、公開した以下のリンクの通り、pg_hba.confを修正済みです。
以下、調査した内容を記します。
IPv4, IPv6のlocalhostをLISTENしているのが確認できました。
[root@centos6 ~]# netstat -ant | grep 5432 tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN tcp 0 0 ::1:5432 :::* LISTEN
ホストが "::1"となっています。
IPv6で接続しようとしているようです。
[sakura@centos6 app]$ psql -h localhost psql: FATAL: ホスト"::1"、ユーザ"sakura"、データベース"sakura、SSL無効用のエントリがpg_hba.confにありません。
本資料では、IPv6を無効化する方法を記述することにしていますが、一応pg_hba.confを修正してIPv6で接続できるようにしてみました。
pg_hba.confのIPv6 local connectionを修正しPostgreSQLを再起動すれば接続できるようになりました。
# IPv6 local connections: host all all ::1/128 trustPostgreSQLをserviceコマンドを使用して再起動すると接続できるようになりました。
[sakura@centos6 ~]$ psql -h localhost psql (8.4.13) "help" でヘルプを表示します. sakura=#
以下は、pg_hba.confの修正は行っていません。
postgresql.confのlisten_addressesのみ変更しました。
CentOS6にyumコマンドでインストールしたpotgresql.confのlisten_addressesの設定は以下のようにlocalhostになっていました。
# - Connection Settings -
listen_addresses = 'localhost' # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost', '*' = all
# (change requires restart)
これを以下のように変更し保存し、PostgreSQLを再起動します。
listen_addresses = '0.0.0.0'
また、pg_hba.confの設定は以前公開した「localhostを指定すると接続できない場合の対処方法」と同じにしてあります。
# IPv4 local connections: host all all 127.0.0.1/32 trust
psqlコマンドで接続してみます。
[sakura@centos6 ~]$ psql -h localhost psql (8.4.13) "help" でヘルプを表示します. sakura=#
netstatコマンドでポート状態を確認してみます。
[root@centos6 ~]# netstat -ant | grep 5432 tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:5432 127.0.0.1:38286 ESTABLISHED tcp 0 0 127.0.0.1:38286 127.0.0.1:5432 ESTABLISHED
0.0.0.0:*と上記のpsqlコマンドで接続した状態が確認できます。
例にlisten_addresses = '127.0.0.1' と設定した場合は以下のようになり接続ができました。
[root@centos6 ~]# netstat -ant | grep 5432 tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:38288 127.0.0.1:5432 TIME_WAIT
以上、PostgreSQLをIPv4でlocalhostに接続する方法を記述しました。