【備忘録】Rails6 Docker-Compose環境下でPostgresに接続する方法

完全に個人的な備忘録です。
いつも忘れてしまうのでメモです。

##はじめに
アプリを開発中に開発環境でDBの中身を見たくなることがあると思います。
確かにModelやschema.rbやMigrateファイルを見れば
それなりにデータベースの構造は理解できますが
実際にどんなデータやテーブルがあるか。
そして、SQL文を直接打ってみたりとORMされていて抽象化されている部分を
掘り下げて理解したいときに使ってます。

その時使用する操作を備忘録としてまとめました。

###使用技術
MacBook
Docker
Ruby
Rails
※Railsで適当にPostモデルとUserモデル(Devise)を作成しました。



###Docker下にあるPostgresDBに接続
```
docker-compose exec db psql -U postgres -d app_development
#-Uはユーザ名、-dは接続先データベース名
```



###リストを表示するコマンド『\l』

```


app_development=# \l 

                                   List of databases
      Name       |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges  

 app_development | postgres | UTF8     | en_US.utf8 | en_US.utf8 | 
 app_test        | 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
(5 rows)
```

###ヘルプコマンド『\?』

```
app_development-# \?
General
  \copyright             show PostgreSQL usage and distribution terms
  \errverbose            show most recent error message at maximum verbosity
  \g [FILE] or ;         execute query (and send results to file or |pipe)
  \gexec                 execute query, then execute each value in its result
  \gset [PREFIX]         execute query and store results in psql variables
  \q                     quit psql
  \crosstabview [COLUMNS] execute query and display results in crosstab
  \watch [SEC]           execute query every SEC seconds

・
・
・
以下割愛
```

###データベースの変更『\c』

```
app_development-# \c app_test
You are now connected to database "app_test" as user "postgres".
app_test-# 
```

###役割の表示『\du』

```

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

###接続しているデータベースのテーブルの表示『\d』

```

app_development-# \d
                  List of relations
 Schema |         Name         |   Type   |  Owner   
--------+----------------------+----------+----------
 public | ar_internal_metadata | table    | postgres
 public | posts                | table    | postgres
 public | posts_id_seq         | sequence | postgres
 public | schema_migrations    | table    | postgres
 public | users                | table    | postgres
 public | users_id_seq         | sequence | postgres
(6 rows)
```

###指定のテーブルのカラム一覧
```
app_development=# \d posts
                                       Table "public.posts"
   Column   |              Type              |                     Modifiers                      
------------+--------------------------------+----------------------------------------------------
 id         | bigint                         | not null default nextval('posts_id_seq'::regclass)
 title      | character varying              | 
 body       | text                           | 
 created_at | timestamp(6) without time zone | not null
 updated_at | timestamp(6) without time zone | not null
Indexes:
    "posts_pkey" PRIMARY KEY, btree (id)
```


##シークエンスなしテーブル表示『\dt』
```

app_development-# \dt
                List of relations
 Schema |         Name         | Type  |  Owner   
--------+----------------------+-------+----------
 public | ar_internal_metadata | table | postgres
 public | posts                | table | postgres
 public | schema_migrations    | table | postgres
 public | users                | table | postgres
(4 rows)
```

###スキーマ一覧『\dn』
```
app_development-# \dn
  List of schemas
  Name  |  Owner   
--------+----------
 public | postgres
(1 row)
```


###SQL文はおなじみ
```

app_development=# select * from posts;
 id | title | body |         created_at         |         updated_at         
----+-------+------+----------------------------+----------------------------
  1 | e     | e    | 2020-05-16 23:40:19.302741 | 2020-05-16 23:40:19.302741
(1 row)
```

###データベースから抜ける

```
# \q
```