PostgreSQL初学者の忘備録。
PostgreSQLをインストールした後、ターミナルから弄っていくことを想定。
なおテーブルの作成などはFlask-SQLAlchemyから行います。
PostgreSQLサーバーの起動・停止
起動と停止には大きく分けてOSのデーモン管理コマンド(Macではbrew)から行うパターンとPostreSQLコマンドから行う方法がある。ここではデーモン管理コマンドの方のみ掲載します。
# 起動
brew services start postgresql
# 停止
brew services stop postgresql
# 再起動
brew services restart postgresql
psqlを利用したPostgreSQLの対話型処理
psqlコマンドはPostgreSQLのターミナル型フロントエンドです。
これを用いることでターミナルからPostgreSQLに問い合わせを行い、結果を確認することができます。
DB一覧の表示
psql -l
特定のロールからアクセス
ロールとはユーザーとグループが1つになったものです。
つまりそれぞれ権限を持った、ログインの最小単位となるユーザーもロール、
そのユーザーをまとめて任意の集団であるグループもロール、ということになります。
PostgreSQLは初回インストール後、自動であらゆる権限が付与されたスーパーユーザーが作成されています。
なお随所でその名称はpostgresと言われていますが、brewでインストールした際はpostgresではなく、MacBookのアカウント名になります。
またスーパーユーザー同様に自動でpostgres, template0, template1というDBも作成されます。
今回はスーパーユーザー名がpostgresだと仮定して、
template1にアクセスするには
psql -U postgres -d template1
となります。
psqlのオプションで-Uはアクセス時のロール名指定に、-dはデータベース名指定に使用します。
なおロール名とデータベース名が一緒である場合は
psql -U postgres
とDB名を省略してOKです。
また
psql template1
とした場合はDB名が指定されたこととなります。
またその時指定されていないロール名はOSのユーザー名が使われます。
(なのでbrewでインストールした際は省略するとスーパーユーザーでのアクセスとなります)
アクセス時には他にもホスト名やポート番号を指定することもでき、それを含めると
psql -h ホスト名 -p ポート番号 -U ロール名 -d データベース名
となる。
なお-hを省略した場合はlocalhost、-pを省略した場合はインストール時に設定したポート(通常は5432)となっている。
また再掲すると -d省略時はアクセスするDB名はユーザー名と同じになり、-Uを省略した場合はOSのユーザー名がロール名となる。
ロールの作成
いつまでもスーパーユーザーでアクセスするわけにもいかないのでロールを作ります。
これ以降は上記の方法で特定のDBにアクセスした状態で作業します。
ロールを作成するには
CREATE ROLE ロール名;
もしくは
CREATE USER ロール名;
上記2つの違いはCREATE USERの場合はデフォルトで作成したロールにログイン権限(=データベースに接続する権限)が付与されています。
CREATE ROLEの方はデフォルトでは付与されていません。付与する場合は、
CREATE ROLE ロール名 LOGIN;
とします。
基本的にロール作成時の権限付与はCREATE ROLE ロール名 権限名;と付与していきます。
主な権限は
・ログイン:LOGIN
・データベース作成:CREATEDB
・ロール作成:CREATEROLE
・スーパーユーザーにする:SUPERUSER
あたりでしょうか。
また上記の権限を取りたい、もしくは今ないロールに与えたい場合は
# 与える場合
ALTER ROLE ロール名 権限名
# 取り去る場合
ALTER ROLE ロール名 NO権限名
とする。例えば既に作成済みでログイン権限のあるロール・user1からログイン権限を取るには
ALTER ROLE ロール名 NOLOGIN
とします。
なおアクセス時にパスワードを要求する場合は
CREATE ROLE ロール名 WITH PASSWORD 'パスワード';
とします。