hello foo bar Saba note | PostgreSQLの使い方まとめ

PostgreSQLの使い方まとめ

2018.11.26 (月)

PostgreSQLは優秀なデータベースなんですが、これまでの歴史の中でいろいろと複雑になっていて面倒になっているというのがあります。正直面倒臭い。でも優秀。MySQLの方が使いやすさで言えば断然使いやすい。最近は能力も拮抗しだしたし果たしてPostgreSQLを使う意味があるのか?と言われればそれまでですが、差別化っていう意味では非常に難しくなってますよ。

Ownerなのかuserなのか。

マニュアルとか読んでいるとuserとownerとroleがほんとよくわからないです。どうして「CREATE ROLE …」というコマンドがユザー作成のコマンドなのか?ほんとわかりません。直感的にcreate roleって個々の権限とか権限セットみたいなものを作るコマンドだと思うじゃないですか?これほんとやめてほしいわ。user=ロール名??はぁ?PDOなどの共通のデータベースアクセスモジュールを使う際はuser名は必ずuserなので、これがrole_nameとかだとほんとややこしいわ。
加えてtemplate1という謎のデフォルトデータベースを介していろいろやるんですが、これも何それ?って感じです。こういう直感的にわからない設計駄目でしょ。

データベースというのは基本的には、

  • user(利用者)
  • data base (データベース(情報そのもの))
  • passwword (データベースそのものにアクセスするための何らかの認証動作)
  • host (要するに場所)
  • roleとかauth (権限、ログインすることでそのデータにアクセスできる権限)

で成り立っています。ポスグレってこれがむちゃくちゃなネーミングになっています。

ユーザーの作成

デフォルトのスーパーユーザーでユーザーを作成します。

# psql -U postgres
postgres=# create role USER_NAME with login password 'SOME_PASSWORD';

確認方法は、

postgres=# \du

で一覧を出してUSER_NAMEが追加されていたらOKです。

作成したユーザーにデータベースを紐づけます。ややこしいのですがPostgresqlはデータベースがないとログインさせてくれません。デフォルトのpostgresデータベースに紐付いているはずなので、いったんそれで試してみます。

# psql -U USER_NAME -d postgres
postgres=>

これでログインできればいったんOKです。
データベースの所有者を変更するコマンドは以下の通りなんですが、

alter database SOME_DATABASE owner to USER_NAME

「データベースの所有者を変更します。 所有者を変更するにはデータベースを所有し、かつ、新しい所有者ロールの間接的あるいは直接的なメンバでなければなりません。 さらに、CREATEDB権限も持たなければなりません。 (スーパーユーザはこれらの権限を自動的に持っていることに注意してください。)」
とあるので、このコマンドが効かない場合(エラーにはなぜかならない)は、USER_NAMEにデータベースの作成見解を与えないといけないってことになっているようです。

基本的なコマンド

ログイン

psql -h [HOST] -U [USER] -d [DATABSE_NAME]

$ psql -h localhost -U quark -d test