\psetでクエリ結果の表示設定を確認する
psqlの\psetメタコマンドは、クエリ結果の表示形式に関する各種オプションをまとめて扱うメタコマンドである。引数なしで実行すると現在の設定一覧を表示する。
testdb=# \pset
border 1
columns 0
csv_fieldsep ','
expanded off
fieldsep '|'
fieldsep_zero off
footer on
format aligned
linestyle ascii
null ''
numericlocale off
pager 1
pager_min_lines 0
recordsep '\n'
recordsep_zero off
tableattr
title
tuples_only off
unicode_border_linestyle single
unicode_column_linestyle single
unicode_header_linestyle single
\xは\pset expandedの短縮形であるように、\aや\Hなど一部のメタコマンドは\psetの特定オプションを切り替えるショートカットになっている。\psetはそれらすべてを1つのコマンドで扱える。
参考: 【PostgreSQL】psqlでクエリ結果を縦持ち表示に切り替える
formatで出力形式を切り替える
\pset formatで結果全体のフォーマットを切り替える。よく使うのはaligned(デフォルト)、unaligned、csvの3つである。
testdb=# \pset format aligned
Output format is aligned.
testdb=# SELECT * FROM users;
id | name | email
----+-------+-------------------
1 | alice | alice@example.com
2 | bob | bob@example.com
(2 rows)
testdb=# \pset format unaligned
Output format is unaligned.
testdb=# SELECT * FROM users;
id|name|email
1|alice|alice@example.com
2|bob|bob@example.com
(2 rows)
testdb=# \pset format csv
Output format is csv.
testdb=# SELECT * FROM users;
id,name,email
1,alice,alice@example.com
2,bob,bob@example.com
unalignedは列を|で区切ったシンプルな形式、csvはカンマ区切りでヘッダー付きの形式になる。csv形式にすると行数の(N rows)フッターも表示されなくなる。
他にもhtml、latexなど出力先に応じた形式が用意されている。ファイルへエクスポートする用途では\copyの方が適している場合が多い。
参考: 【PostgreSQL】psqlでクライアント側からCSVを入出力する
borderで罫線の詳しさを変える
\pset borderは0〜2の数値で罫線の量を指定する。
testdb=# \pset format aligned
testdb=# \pset border 0
Border style is 0.
testdb=# SELECT * FROM users;
id name email
-- ----- -----------------
1 alice alice@example.com
2 bob bob@example.com
(2 rows)
testdb=# \pset border 2
Border style is 2.
testdb=# SELECT * FROM users;
+----+-------+-------------------+
| id | name | email |
+----+-------+-------------------+
| 1 | alice | alice@example.com |
| 2 | bob | bob@example.com |
+----+-------+-------------------+
(2 rows)
デフォルトのborder 1は列の間だけに縦線が入る形式である。border 2にすると外枠も付く。Markdownの表やドキュメントへ貼り付けたい場合に見やすくなる。
nullでNULLの表示方法を変える
デフォルトではNULL値は空欄で表示され、通常の空文字列との区別がつきにくい。\pset nullで明示的な表示文字列を指定できる。
testdb=# \pset null '(null)'
Null display is "(null)".
testdb=# SELECT id, name, email FROM users;
id | name | email
----+-------+-------------------
1 | alice | alice@example.com
2 | bob | bob@example.com
4 | carol | (null)
(3 rows)
空文字列の行とNULLの行が混在するテーブルを調査する際に設定しておくと、見分けがつきやすくなる。
titleで結果に見出しを付ける
\pset titleで結果の上に見出しを表示する。
testdb=# \pset title 'ユーザー一覧'
Title is "ユーザー一覧".
testdb=# SELECT * FROM users;
ユーザー一覧
id | name | email
----+-------+-------------------
1 | alice | alice@example.com
2 | bob | bob@example.com
(2 rows)
引数なしで実行すると見出しを解除する。
testdb=# \pset title
Title is unset.
複数のターミナルで別々のクエリを実行している場合など、どの画面が何を表示しているか分かりにくいときに使うと区別しやすくなる。
footerで行数表示を消す
\pset footer offにすると(N rows)という行数表示を省略できる。
testdb=# \pset footer off
testdb=# SELECT * FROM users;
id | name | email
----+-------+-------------------
1 | alice | alice@example.com
2 | bob | bob@example.com
testdb=# \pset footer on
\pset borderや\pset nullなどと異なり、\pset footerは設定変更時のメッセージを表示しない。
結果をそのままスクリーンショットや資料に貼り付けたい場合、行数表示が邪魔になることがある。そうした場面で使う。
具体例: Markdown表として貼り付ける
ブログやドキュメントにクエリ結果を貼り付ける場合、unaligned形式とfieldsepを組み合わせるとMarkdownの表に近い形式で出力できる。
testdb=# \pset format unaligned
testdb=# \pset fieldsep ' | '
testdb=# \pset footer off
testdb=# SELECT * FROM users;
id | name | email
1 | alice | alice@example.com
2 | bob | bob@example.com
ヘッダー行の下に区切り線がないため完全なMarkdown表にはならないが、列を手動で区切り直す手間は減らせる。設定を戻すのを忘れずに行う。
testdb=# \pset format aligned
testdb=# \pset fieldsep '|'
testdb=# \pset footer on
