最近、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 = '*'
と変更しないといけないらしい。そのように変更して無事、リモートから接続できました。思い込みで作業するとつまずくなぁ。反省、反省。