PostgreSQL の ネットワーク接続設定

PostgreSQL では pg_hba.conf を使って接続設定を行いますが その前に ネットワーク接続の設定を postgresql.conf に行う必要があります。 (デフォルトでも動くと思いますが)

PostgreSQL は、TCP/IP ソケット や UNIX ドメインソケット を使って接続します。 わからなければ、TCP/IP ソケット は、ネットワーク、UNIX ドメインソケット は ローカル → ローカルの非ネットワーク通信だと考えてください。 外部から接続する場合、TCP/IP ソケット を使いますが、 ローカルから使う場合は TCP/IP ソケット でも UNIX ドメインソケット でも通信できます。

設定は postgresql.conf の listen_addresses パラメータを使用しますが CentOS や Redhat では デフォルトでは 次のようにコメントアウトされています。 コメントアウトされている場合のデフォルト値は localhost です。

#listen_addresses = 'localhost' # what IP address(es) to listen on;
                                # comma-separated list of addresses;
                                # defaults to 'localhost', '*' = all
                                # (change requires restart)

この場合に PostgreSQL が LISTEN しているアドレスを netstat コマンドで 確認してみます。

localhost なので 次のように 127.0.0.1 で LISTEN していました。 また、ついでに UNIX ドメインソケットも見えます。

# netstat -an | grep LISTEN | grep 5432

tcp   0   0   127.0.0.1:5432    0.0.0.0:*   LISTEN
unix  2  [ ACC ]   STREAM   LISTENING   343193 /tmp/.s.PGSQL.5432

この設定では IP アドレスが 127.0.0.1 として アクセスされたものしか接続できません。 外部から 192.168.1.92 といった IP アドレスでアクセスされた場合は 接続できないわけです。

外部から接続させるには 通常 listen_addresses パラメータに '*' (アスタリスク) を設定します。

listen_addresses = '*'

この場合は netstat の結果が 0.0.0.0 となります。

# netstat -an | grep LISTEN

tcp   0   0   0.0.0.0:5432      0.0.0.0:*   LISTEN
unix  2  [ ACC ]   STREAM   LISTENING   343193 /tmp/.s.PGSQL.5432

0.0.0.0 の場合 127.0.0.1 でも 192.168.1.92 でも接続することができます。

他にも カンマで区切って指定することもできます。

listen_addresses = 'localhost,192.168.1.92'

この場合は netstat の結果が 次のように複数出てきます。

# netstat -an | grep LISTEN

tcp   0   0   192.168.1.92:5432 0.0.0.0:*   LISTEN
tcp   0   0   127.0.0.1:5432    0.0.0.0:*   LISTEN
unix  2  [ ACC ]   STREAM   LISTENING   343193 /tmp/.s.PGSQL.5432

TCP/IP ソケット を使用せず UNIX ドメインソケットのみで使用する場合は listen_addresses パラメータに 空文字を設定します。

listen_addresses = ''

この場合は netstat の結果が 次のように複数出てきます。

# netstat -an | grep LISTEN

unix  2  [ ACC ]   STREAM   LISTENING   343193 /tmp/.s.PGSQL.5432

(Web サーバなどの) アプリケーションサーバと PostgreSQL サーバが同じマシンで 外部から接続させる必要がないのであれば、こうしておくと ネットワークを使用した接続を禁止できます。

Google サイト内検索

Amazonアソシエイト