\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(デフォルト)、unalignedcsvの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)フッターも表示されなくなる。

他にもhtmllatexなど出力先に応じた形式が用意されている。ファイルへエクスポートする用途では\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

参考