psqlの\d系メタコマンドには、日常的な開発ではあまり出番のないオブジェクトの一覧を確認するものもある。ここではテーブルスペース・照合順序・文字コード変換・ラージオブジェクト・アクセスメソッド・イベントトリガー・拡張統計をまとめて紹介する。

\dbコマンドでテーブルスペース一覧を確認する

データファイルの物理的な格納先を切り替えるテーブルスペースの一覧は\dbで確認する。

testdb=# \db
      List of tablespaces
    Name    | Owner | Location
------------+-------+----------
 pg_default | postgres   |
 pg_global  | postgres   |
(2 rows)

pg_default(通常のテーブル用)とpg_global(クラスタ共有のシステムカタログ用)は、追加のテーブルスペースを作成していない環境でも最初から存在する。\db+を付けるとサイズも確認できる。

testdb=# \db+
                                List of tablespaces
    Name    | Owner | Location | Access privileges | Options |  Size  | Description
------------+-------+----------+-------------------+---------+--------+-------------
 pg_default | postgres   |          |                   |         | 77 MB  |
 pg_global  | postgres   |          |                   |         | 560 kB |
(2 rows)

\dOコマンドで照合順序の一覧を確認する

文字列のソート順を制御する照合順序(コレーション)は\dOで確認する。ICUプロバイダを使う日本語向けの照合順序を作成してみる。

testdb=# CREATE COLLATION ja_ci (provider = icu, locale = 'ja-u-ks-level2');
testdb=# \dO
                              List of collations
 Schema | Name  |    Collate     |     Ctype      | Provider | Deterministic?
--------+-------+----------------+----------------+----------+----------------
 public | ja_ci | ja-u-ks-level2 | ja-u-ks-level2 | icu      | yes
(1 row)

ja-u-ks-level2は、ICUのロケール指定で濁点・半濁点や大文字・小文字の違いを区別しない(レベル2)ソート順を意味する。ORDER BY column COLLATE "ja_ci"のように列ごとに指定して使う。

\dcコマンドで文字コードの変換一覧を確認する

エンコーディング間の変換関数の一覧は\dcで確認する。パターンなしだと自作の変換だけが対象になり、標準で組み込まれている変換は表示されない。

testdb=# \dc *utf8*
                               List of conversions
   Schema   |          Name          |     Source     |  Destination   | Default?
------------+------------------------+----------------+----------------+----------
 pg_catalog | big5_to_utf8           | BIG5           | UTF8           | yes
 pg_catalog | euc_cn_to_utf8         | EUC_CN         | UTF8           | yes
 pg_catalog | euc_jis_2004_to_utf8   | EUC_JIS_2004   | UTF8           | yes
 pg_catalog | euc_jp_to_utf8         | EUC_JP         | UTF8           | yes
 ...
(N rows)

パターンにマッチする組み込みの変換もあわせて表示される。\encodingで扱うクライアント側のエンコーディングとは別に、サーバー内部でもこうした変換関数を介してエンコーディングを変換している。

参考: 【PostgreSQL】psqlで接続を切り替え、接続情報を確認する

\dlコマンドでラージオブジェクト一覧を確認する

bytea型に収まらない大きなバイナリデータ用のラージオブジェクトは\dlで確認する。

testdb=# SELECT lo_create(0);
 lo_create
-----------
     16806
(1 row)

testdb=# \dl
        Large objects
  ID   | Owner | Description
-------+-------+-------------
 16806 | postgres   |
(1 row)

\lo_importでファイルをラージオブジェクトとして取り込んだ場合も、この一覧に登録される。\dl+でも同じ列が表示され、ラージオブジェクトにはテーブルのようなサイズ情報が個別には付与されない。

\dyコマンドでイベントトリガー一覧を確認する

CREATEALTERなどのDDL実行をフックするイベントトリガーの一覧は\dyで確認する。

testdb=# CREATE FUNCTION log_ddl() RETURNS event_trigger AS $$
testdb-# BEGIN RAISE NOTICE 'ddl command executed'; END;
testdb-# $$ LANGUAGE plpgsql;
testdb=# CREATE EVENT TRIGGER audit_ddl ON ddl_command_end EXECUTE FUNCTION log_ddl();
testdb=# \dy
                     List of event triggers
   Name    |      Event      | Owner | Enabled | Function | Tags
-----------+-----------------+-------+---------+----------+------
 audit_ddl | ddl_command_end | postgres   | enabled | log_ddl  |
(1 row)

以降にDDLを実行すると、登録したイベントトリガーが発火する。

testdb=# CREATE STATISTICS users_stat (dependencies) ON id, name FROM users;
NOTICE:  ddl command executed
CREATE STATISTICS

監査ログの記録や、特定のDDLを禁止するポリシーの実装にイベントトリガーを使う場合、\dyで現在有効なトリガーを確認できる。

\dXコマンドで拡張統計の情報一覧を確認する

複数列の相関を考慮したクエリプランを立てるための拡張統計オブジェクトは\dXで確認する。

testdb=# CREATE STATISTICS users_stat (dependencies) ON id, name FROM users;
testdb=# ANALYZE users;
testdb=# \dX
                        List of extended statistics
 Schema |    Name    |     Definition      | Ndistinct | Dependencies | MCV
--------+------------+---------------------+-----------+--------------+-----
 public | users_stat | id, name FROM users |           | defined      |
(1 row)

Dependencies列がdefinedになっているのは、CREATE STATISTICSdependencies統計の種類を指定して作成したためである。通常の単一列の統計(ANALYZEが自動的に集める分)とは別に、列同士の関係性を明示的に記録したい場合に使う。

\dAコマンドでアクセスメソッド一覧を確認する

インデックスやテーブルの物理的な格納方式を表すアクセスメソッドの一覧は\dAで確認する。

testdb=# \dA
List of access methods
  Name  | Type
--------+-------
 brin   | Index
 btree  | Index
 gin    | Index
 gist   | Index
 hash   | Index
 heap   | Table
 spgist | Index
(7 rows)

CREATE INDEX ... USING btreeのように指定するインデックス種別や、テーブル自体の格納形式(標準はheap)がここに一覧される。拡張機能によってはこの一覧に独自のアクセスメソッドを追加登録するものもある。

参考