PostgreSQL でリモート接続

最近、MySQL ばかり使っているので、PostgresSQL をサクっとインストールしてみようと思ったら思いの外、時間がかかったので設定のメモ。

今回は Fedora 君に入れたので

  yum install postgres*

 で、出てきた PostgresSQL のパッケージをインストール。

これで、postgres のユーザー/グループが自動的にできるんですけど、パスワードを設定し直さないと、ログインできません。root でパスワードを変更して、postgres ユーザーでログインできるようにします。とりあえず、その後 postgres ユーザーで作業すると簡単なので…。必要な作業が終わったら、postgres ユーザーはログインできなくしてしまって方が安全です。

MySQL のようにそれでとりあえずデーターベースにログインできると思ったら初期化をしないとダメなんですね。

postgres ユーザーに su で変更した後、

  initdb --nolocale --encoding=UTF8

 とデータベースを初期化して、

  pg_ctl start &

 とすれば、 PostgreSQL が起動します。自動で起動させるには、サービスで自動立ち上げできるように設定しておきましょう。

次に、ユーザーを作成します。testuser を作成するには、シェルから

  createuser -d -U postgres -P testuser

と入力します。-a オプションをつけるとスーパーユーザーになってしまうので注意。できる権限を聞いてくるので、必要な権限に yes と応えて、testuser を作成します。

psql でログインして

 SELECT * FROM pg_user;

 として、ユーザーが作成されていれば OK。

ところで、ここまで来て、パスワードを全く聞いてこないことが気になる…。そこで、/var/lib/pgsql/data/pg_hba.conf を見てみると、METHOD が “trust” になっている。postgreSQL ってデフォルトでは、localhost のみ接続で、パスワード不要になっているのね。パスワードを聞いてこないのは気持ち悪いので、

local all all                         md5
host  all all        127.0.0.1/32     md5
host  all all        162.168.100.0/24 md5   # 追加

 と、passwoed を md5 にするようにすると共に、宅内ローカルからリモートで接続できるようにネットワークを追加。

パスワードは、postgreSQL にログインして、

  ¥password testuser

 として、パスワードを設定します。その後に、postgres で、postgreSQL にログインして、

  ¥c postgres testuser

と入力し、

  postgres=>CREATE DATABESE testdb;

これで testdb というデータベース空間が作成されます。一応これで、普通にログインできるはず。

  psql -h localhost -U testuser testdb

ならログインできるんですが、

  psql -h 192.168.100.100 -U testuser testdb

とすると、接続が拒否されます。リモートマシンだけでなくサーバーマシンでもログインできません…???。ファイアーウォールでポート 5432 も開いています。

google 先生に聞いてみると、/var/lib/pgsql/data/postgresql.conf の

  #listen_addresses = 'localhost'
          |
          V
  listen_addresses = '*'

 と変更しないといけないらしい。そのように変更して無事、リモートから接続できました。思い込みで作業するとつまずくなぁ。反省、反省。

Leave a Reply