My Daily Programming Life...

Postgresに外部から接続

mysqlよりちょっと難しかったのでメモ。

環境
- CentOS5
- Postgres 8.1.1

とりあえず初期設定は
postgresユーザーになって、initdbを行う。DB用フォルダは自分で-Dオプションで指定してもいいし、環境変数PGDATAに入れておいてもいいらしい。とりあえずCentOS5で標準でインストールされているPosgtresを使うと、postgresユーザーの.bash_profileにすでに環境変数が登録されているので、そのままにしておいた。

その後はrootユーザーでservice postgresql startなどのコマンドで起動。

とりあえずそのlocalhostからpsqlで接続。psql -U postgres でよい。これで接続できればとりあえずPostgresサーバーは動いている。
ここまでは簡単だった。

次に外部からの接続設定。
今回は、192.168.1.0ネットワークでPostgresサーバーが192.168.10で動いているものとする。
設定箇所は2か所。DB用フォルダの中にpostgresql.confとpg_hba.confがある。(CentOSの場合 /var/lib/pgsql/dataが標準の場所)
postgresql.confがサーバー全体の設定で、pg_hba.confが接続許可設定という感じだと思う。

まず、postgresql.confでlisten_addressの行を変更する。これはどのIPアドレスで接続待ちをするかの設定。接続を許可するIPアドレスとは異なるので注意。一回間違えた。というわけでサーバー側のIPアドレスを指定。デフォルトだとlocalhostとなっているため、192.168.1.10に変更するか、"*"(all)にしてしまう。
listen_address = "*"
というかんじ。
これで192.168.1.10で待ち受けてくれる。

次にportの指定。
デフォルトだとportの行はコメントアウトされているので、それをコメントイン。とりあえずデフォルトの5432にしておく。
port=5432
というかんじ。これでpostgresql.confの設定は終わり。

次にpg_hba.confの設定。これは接続してくるホストの許可リスト。
デフォルトだと、localhostのみが許可されているので、192.168.1.0ネットワーク内から接続許可するようにする。
host all all 192.168.1.0/24 trust
こんな感じの行を一番下に追加する。特定のデータベースやユーザーのみ許可したいときは
host dbname user address/mask trust
のような感じで書けばよい。詳しくはpg_hba.confに書いてある。

これで外部から接続できるはず。
外部pgAdminなどから接続できるようになるはず。

あ、あと注意としてファイアウォール。CentOS5はpostgresをインストールしても5432ポートは自動的には開いてくれない。ファイアーウォール設定でTPC 5432ポートを開けておく必要がある。

0 コメント:

Post a Comment

feedSubscribe to my feed