psqlのコマンドを覚えるために略の意味を探る、もう /d ってなんだっけ？ってならないために！

# 経緯

- psql をたまに使うと、/d ってなんだっけ？っとなる（データベース一覧の略のdだっけってなる）
- ヘルプを表示するコマンド /? だけ覚えておけばよいが
- せっかくなので、もう少し詳しくなっておく

# 環境

- Ubuntu 20.04.2 LTS (AWS)
- postgresql-client-12


# 起動

## データベース名を指定せずに起動
```
psql -h host -U user
```

## データベース名を指定して起動
```
psql -h host -U user -d dbname
```

# ヘルプの表示方法

```bash:show_help_on_backslash_commands
/?
```
- これさえ覚えておけばよさそう

# データベース一覧を取得

```bash
/l
```

- list databases の略の「l」と覚えておけばよさそう

# データベースの切り替え

```bash
/connect dbname
```

または、

```bash
/c dbname
```

- connectの略の「c」と覚えればよさそう
- ヘルプに表示されないので、dbnameを指定して起動する癖をつけておいた方がいいかもしれない
- (データベース名を思い出せず、とりあえず接続して確認というケースはあるが...)

## データベースへの接続のマニュアル (*3 より抜粋)
```bash
\c or \connect [ -reuse-previous=on|off ] [ dbname [ username ] [ host ] [ port ] | conninfo ]
```

# データベースの接続の確認

```bash
/conninfo
```
- 接続中のデータベースの名前などを確認できる

# テーブルのリスト表示

```
/d
```
- list tables, views, and sequences とヘルプにある
- 「d」は、describeの略と覚えるとよさそう
- 「d」の後に何も指定しないときは、リスト表示すると覚えるとよさそう

# テーブルの内容を表示

```
  /d NAME
```

- ヘルプには「describe table, view, sequence, or index」とある
- 「describe 対象物の名前」と覚えるとよさそう

# へプルコマンドを実行したときの結果

```bash
General
  /copyright             show PostgreSQL usage and distribution terms
  /crosstabview [COLUMNS] execute query and display results in crosstab
  /errverbose            show most recent error message at maximum verbosity
  /g [FILE] or ;         execute query (and send results to file or |pipe)
  /gdesc                 describe result of query, without executing it
  /gexec                 execute query, then execute each value in its result
  /gset [PREFIX]         execute query and store results in psql variables
  /gx [FILE]             as /g, but forces expanded output mode
  /q                     quit psql
  /watch [SEC]           execute query every SEC seconds

Help
  /? [commands]          show help on backslash commands
  /? options             show help on psql command-line options
  /? variables           show help on special variables
  /h [NAME]              help on syntax of SQL commands, * for all commands

Query Buffer
  /e [FILE] [LINE]       edit the query buffer (or file) with external editor
  /ef [FUNCNAME [LINE]]  edit function definition with external editor
  /ev [VIEWNAME [LINE]]  edit view definition with external editor
  /p                     show the contents of the query buffer
  /r                     reset (clear) the query buffer
  /s [FILE]              display history or save it to file
  /w FILE                write query buffer to file

Input/Output
  /copy ...              perform SQL COPY with data stream to the client host
  /echo [STRING]         write string to standard output
  /i FILE                execute commands from file
  /ir FILE               as /i, but relative to location of current script
  /o [FILE]              send all query results to file or |pipe
  /qecho [STRING]        write string to query output stream (see /o)

Conditional
  /if EXPR               begin conditional block
  /elif EXPR             alternative within current conditional block
  /else                  final alternative within current conditional block
  /endif                 end conditional block

Informational
  (options: S = show system objects, + = additional detail)
  /d[S+]                 list tables, views, and sequences
  /d[S+]  NAME           describe table, view, sequence, or index
  /da[S]  [PATTERN]      list aggregates
  /dA[+]  [PATTERN]      list access methods
  /db[+]  [PATTERN]      list tablespaces
  /dc[S+] [PATTERN]      list conversions
  /dC[+]  [PATTERN]      list casts
  /dd[S]  [PATTERN]      show object descriptions not displayed elsewhere
  /dD[S+] [PATTERN]      list domains
  /ddp    [PATTERN]      list default privileges
  /dE[S+] [PATTERN]      list foreign tables
  /det[+] [PATTERN]      list foreign tables
  /des[+] [PATTERN]      list foreign servers
  /deu[+] [PATTERN]      list user mappings
  /dew[+] [PATTERN]      list foreign-data wrappers
  /df[anptw][S+] [PATRN] list [only agg/normal/procedures/trigger/window] functions
  /dF[+]  [PATTERN]      list text search configurations
  /dFd[+] [PATTERN]      list text search dictionaries
  /dFp[+] [PATTERN]      list text search parsers
  /dFt[+] [PATTERN]      list text search templates
  /dg[S+] [PATTERN]      list roles
  /di[S+] [PATTERN]      list indexes
  /dl                    list large objects, same as /lo_list
  /dL[S+] [PATTERN]      list procedural languages
  /dm[S+] [PATTERN]      list materialized views
  /dn[S+] [PATTERN]      list schemas
  /do[S]  [PATTERN]      list operators
  /dO[S+] [PATTERN]      list collations
  /dp     [PATTERN]      list table, view, and sequence access privileges
  /dP[itn+] [PATTERN]    list [only index/table] partitioned relations [n=nested]
  /drds [PATRN1 [PATRN2]] list per-database role settings
  /dRp[+] [PATTERN]      list replication publications
  /dRs[+] [PATTERN]      list replication subscriptions
  /ds[S+] [PATTERN]      list sequences
  /dt[S+] [PATTERN]      list tables
  /dT[S+] [PATTERN]      list data types
  /du[S+] [PATTERN]      list roles
  /dv[S+] [PATTERN]      list views
  /dx[+]  [PATTERN]      list extensions
  /dy     [PATTERN]      list event triggers
  /l[+]   [PATTERN]      list databases
  /sf[+]  FUNCNAME       show a function's definition
  /sv[+]  VIEWNAME       show a view's definition
  /z      [PATTERN]      same as /dp

Formatting
  /a                     toggle between unaligned and aligned output mode
  /C [STRING]            set table title, or unset if none
  /f [STRING]            show or set field separator for unaligned query output
  /H                     toggle HTML output mode (currently off)
  /pset [NAME [VALUE]]   set table output option
                         (border|columns|csv_fieldsep|expanded|fieldsep|
                         fieldsep_zero|footer|format|linestyle|null|
                         numericlocale|pager|pager_min_lines|recordsep|
                         recordsep_zero|tableattr|title|tuples_only|
```

# 参考資料

- *1 https://stackoverflow.com/questions/60712437/what-does-d-mean-in-dt-in-postgres
- *2 https://www.liquidweb.com/kb/listing-switching-databases-postgresql/
- *3 https://www.postgresql.org/docs/9.1/app-psql.html