PostgreSQL 8.1 以降は少なくとも psql での管理はやりやすくなってる
気がする。ごめんなさいね、古い話でホントに。(ベンチとか取ってないんでその辺は知りません。)
デフォルト DB が postgres になってるのも role に一本化されているのも、メリットの方が大きい。
例えばデフォルト DB の変更は
psql -U postgres
だけで使い始められるってことを意味する。template1 とか書かなくていいし、template1 を誰かに使われてて作業できませんて可能性も減っていい感じ。template1 は使われてるかもしれないから psql -l でデータベース一覧を取得して適当なやつに繋いで…とか余計なことは全然考えなくていい。
また role は \du だけでこの出力を得られる。
Role name | Superuser | Create role | Create DB | Connections | Member of
---------------+-----------+-------------+-----------+-------------+-----------
postgres | yes | yes | yes | no limit |
web | no | no | no | no limit |
www | no | no | no | no limit | {web}
なんだこれとか言っちゃダメ(^^; ただのサンプルだから。これの何がいいって、role の一覧で
- user
- group
- どの user がどの group に属しているのか
全部分かるってこと。しかも ID じゃなくて名前で分かる。スバラシイ。楽ちんじゃないか。これでデータベースの権限管理をまともにやる気になれますよ?
psql -U postgres -t -A -F '|' -c '\du' | awk -F \| '{print $1, $6}'
なんて書くと
postgres
web
www {web}
なんてものが採れます。ふむふむ。(connections の列の中身に空白が入っているのでセパレータをいじってます。この辺はお好きにどうぞ。)