PostgreSQLコマンド

ログイン

$ psql -U postgres
# postgresはユーザー名

ロール(ユーザー一覧)

postgres-# \du
                                   List of roles
 Role name |                         Attributes                         | Member of 
-----------+------------------------------------------------------------+-----------
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

デフォルトのユーザー postgres はsuperuserなのでいろいろと危険な気がする。

ロール作成

postgres=# create role appuser with login password 'mypasswordk';
CREATE ROLE

作成したユーザーでログイン

# psql -U appuser
psql: error: could not connect to server: FATAL:  database "appuser" does not exist

なんで?
おそらくDBを指定していないから

Database作成

postgresユーザーでログインしてDB作る
postgres=# create database app_db;
CREATE DATABASE

# database一覧表示
ostgres=# \l
                                 List of databases
   Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges   
-----------+----------+----------+------------+------------+-----------------------
 app_db    | postgres | UTF8     | en_US.utf8 | en_US.utf8 | 
 postgres  | postgres | UTF8     | en_US.utf8 | en_US.utf8 | 
 template0 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
           |          |          |            |            | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
           |          |          |            |            | postgres=CTc/postgres
(4 rows)
所有者を変更する
postgres=# alter database app_db owner to appuser
postgres-# ;
ALTER DATABASE
postgres=# \l app_db 
                             List of databases
  Name  |  Owner  | Encoding |  Collate   |   Ctype    | Access privileges 
--------+---------+----------+------------+------------+-------------------
 app_db | appuser | UTF8     | en_US.utf8 | en_US.utf8 | 
(1 row)
作成したDBを指定してログイン
# psql -U appuser -d app_db
psql (12.3 (Debian 12.3-1.pgdg100+1))
Type "help" for help.

app_db=>

ログインできたけど、パスワードいらなかった。なんで?

テーブル作成してみる
app_db=> create table mybook (
app_db(>   id integer, 
app_db(>   name varchar(10)
app_db(> );
CREATE TABLE
app_db=> \dt
         List of relations
 Schema |  Name  | Type  |  Owner  
--------+--------+-------+---------
 public | mybook | table | appuser
(1 row)
DBを変える
# \c app_db
table一覧
# \dt
ロール(ユーザー)にCREATEDB権限をつける

RailsでDBに接続しているユーザーにCRETEDB権限がないためテスト失敗しているみたいだったので、つけてみる

# appuserには今の所何もついていない
postgres=# \du
                                   List of roles
 Role name |                         Attributes                         | Member of 
-----------+------------------------------------------------------------+-----------
 appuser   |                                                            | {}
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

# createdbロールをつける
postgres=# alter role appuser with createdb;
ALTER ROLE
postgres=# \du
                                   List of roles
 Role name |                         Attributes                         | Member of 
-----------+------------------------------------------------------------+-----------
 appuser   | Create DB                                                  | {}
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

参考

PostgreSQLの使い方
PostgreSQL は世界中で広く利用されているデータベースの一つです。ここでは PostgreSQL をこれから使われる方を対象とした PostgreSQL 入門を掲載します。 PostgreSQL のインストール方法や、 PostgreSQL を使ってデータベースを構築する手順について簡単なサンプルを使って実際に...

Comments

タイトルとURLをコピーしました