PostgreSQLはじめのいっぽ

MySQLにばっか甘えてきてPostgreSQLの使い方がわからなかったので最初の流れとかメモっときます。

ここを参考にさせていただきました。

http://dev.classmethod.jp/cloud/aws/install-postgresql-on-aws-ec2/

PostgreSQLではユーザのことをロールと呼ぶっぽい。

初期化

PostgreSQLを使うには、まずdatabaseの初期化処理が必要です。以下を実行しておきます。

$ initdb

自動起動設定

PostgreSQLchkconfigで自動で起動する設定をしておく。

$ sudo /sbin/chkconfig --list|grep postgresql
$ sudo /sbin/chkconfig postgresql on
$ sudo /sbin/chkconfig --list|grep postgresql

ランレベルの2,3,4,5がonになったことが確認できればokです。

ユーザ設定

postgresユーザのパスワードをアップデートします。

$ sudo passwd postgres

これでログインできるようになります。

$ su - postgres
パスワード:
-bash-4.1$ exit

conf設定

設定ファイルをいじっていきます。

/var/lib/pgsql9/data/postgresql.confの、listen_addressesコメントアウトを外して以下のように変更します。

listen_addresses = '*'                  # what IP address(es) to listen on;

/var/lib/pgsql9/data/pg_hba.confを、以下のみが有効になるようにコメントアウト・編集します。

local   all     all         trust
host    all     all     0.0.0.0/0       md5

設定が大丈夫かどうか確認してみます。以下を叩いてどちらもOKが返って来れば大丈夫。

$ sudo /sbin/service postgresql stop
$ sudo /sbin/service postgresql start

ロール・DBの作成

postgresユーザ以外に実際にDBで作業するロールを追加します。

$ su - postgres
$ createuser -AdPE username

そしたらさきほど作成したロールがいじるDBを作成します。

$ createdb -E UTF8 -U username -W dbname

これで作成完了。postgresユーザからec2のユーザに戻ります。OS側でもさっきのDBのロールに紐づくユーザを設定しておきます。

$ sudo adduser username
$ sudo passwd username

接続確認

さっきのユーザにログインしてpsql -lを叩くと、作成したDBが確認できると思います。

$ su - root
$ psql -l

OSのユーザでシェルから直接$ psql -lとか叩けるのはOSのユーザとDBのロールが対応してるからなのか。