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コマンドでイベントトリガー一覧を確認する
CREATEやALTERなどの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 STATISTICSでdependencies統計の種類を指定して作成したためである。通常の単一列の統計(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)がここに一覧される。拡張機能によってはこの一覧に独自のアクセスメソッドを追加登録するものもある。
参考
- PostgreSQL Documentation: CREATE TABLESPACE
- PostgreSQL Documentation: Collation Support
- PostgreSQL Documentation: Event Triggers
- PostgreSQL Documentation: Extended Statistics
