【PostgreSQL】メタコマンド〜\d〜

## 初めに

Qiita Engineer Festa 2024に参加中。完走目指してます。
他のメタコマンドについては以下から読んでください。

https://qiita.com/dai_chi/items/04f5339d54130f070671

## \dとは

> `pattern`にマッチする各リレーション（テーブル、ビュー、マテリアライズドビュー、インデックス、シーケンス、外部テーブル）または複合型について、全ての列、列の型、テーブル空間（デフォルト以外を使用している場合）、`NOT NULL`やデフォルトなどの特別な属性を表示します。 関連付けられているインデックス、制約、ルールおよびトリガも表示されます。 外部テーブルでは関連する外部サーバも表示されます。 （「パターンのマッチング」については後述の[パターン](https://www.postgresql.jp/docs/15/app-psql.html#APP-PSQL-PATTERNS)で定義されています。）
> 
> 
> 一部の種類のリレーションでは、`\d`は各列について追加の情報を表示します。 例えば、シーケンスでは列の値、インデックスではインデックス式、外部テーブルでは外部データラッパーのオプションです。
> 
> `\d+`というコマンド形式も同一ですが、より多くの情報を表示します。 こちらでは、テーブルの列に関連付けられたコメントやテーブルにOIDが存在するかどうか、リレーションがビューの場合はビューの定義、デフォルトと異なる[replica identity](https://www.postgresql.jp/docs/15/sql-altertable.html#SQL-ALTERTABLE-REPLICA-IDENTITY)の設定、リレーションにアクセスメソッドがあるなら[アクセスメソッド](https://www.postgresql.jp/docs/15/sql-create-access-method.html)名も表示されます。
> 
> デフォルトではユーザが作成したオブジェクトのみが表示されます。 システムオブジェクトを含めるためには、パターンまたは`S`修飾子を付与してください。
> 

## 試してみた

テーブル、ビュー、シーケンスのリストを表示

```sql
postgres=# \d
                 List of relations
 Schema |        Name         |   Type   |  Owner   
--------+---------------------+----------+----------
 public | sales               | table    | postgres
 public | source_table        | table    | postgres
 public | source_table_id_seq | sequence | postgres
 public | target_table        | table    | postgres
 public | test                | table    | postgres
 public | test_data           | table    | postgres
 public | test_data_id_seq    | sequence | postgres
 public | test_id_seq         | sequence | postgres
 public | users               | table    | postgres
 public | users_id_seq        | sequence | postgres
(10 rows)
```

特定のテーブルのカラム情報、インデックス情報、制約情報などを表示

```sql
postgres=# \d users
                                    Table "public.users"
 Column |          Type          | Collation | Nullable |              Default              
--------+------------------------+-----------+----------+-----------------------------------
 id     | integer                |           | not null | nextval('users_id_seq'::regclass)
 name   | character varying(100) |           |          | 
 age    | integer                |           |          | 
Indexes:
    "users_pkey" PRIMARY KEY, btree (id)
```

`+`オプションを使用して、さらに詳細な情報を表示

```sql
postgres=# \d+ users
                                                               Table "public.users"
 Column |          Type          | Collation | Nullable |              Default              | Storage  | Compression | Stats target | Description 
--------+------------------------+-----------+----------+-----------------------------------+----------+-------------+--------------+-------------
 id     | integer                |           | not null | nextval('users_id_seq'::regclass) | plain    |             |              | 
 name   | character varying(100) |           |          |                                   | extended |             |              | 
 age    | integer                |           |          |                                   | plain    |             |              | 
Indexes:
    "users_pkey" PRIMARY KEY, btree (id)
Access method: heap
```

## まとめ

主に調査などで現状を知るのに利用しています。