psql

Posted on:

ov はpsqlクライアントのページャーとしても使用できます。 PostgreSQLのクライアントツールであるpsqlは、クエリ結果が画面に収まらない場合に自動的に「ページャー」と呼ばれるツールを使って結果をスクロール表示します。

PSQLのPAGERを設定するも参照してください。

設定例

PSQL_PAGERは、psqlの出力結果を表示するためのページャーを指定する環境変数です。以下は、PSQL_PAGER の推奨設定例です。

PSQL_PAGER='ov -F -C -d "|" -H1 --column-rainbow --align'

~/.psqlrc設定ファイルに以下を書くことでも使用できます。

\setenv PSQL_PAGER 'ov -F -C -d "|" -H1 --column-rainbow --align'

psqlの表示をカスタマイズするために、ovの設定ファイルconfig.yamlを使用します。config.yamlはホームディレクトリの.config/ov/に配置し、以下のように設定します。

StyleHeader:
  Background: "#23274f"
  Bold: true
StyleColumnHighlight:
  Foreground: "lightcyan"
  Reverse: true
StyleAlternate:
  Background: "#2a2a2a"

PostgreSQLでの表示の問題

PostgreSQLでクエリの結果を表示すると、以下のように表示されます。ページャーを使用するように設定している場合は、1画面分を表示して次の操作を待ちます。

/ov/psql/psql00.png /ov/psql/psql00.png

最初の行にヘッダーとして列名が表示され、その下の行で列の区切りとして-+による線が引かれています。各列は | で区切られています。 結果の行が終わると(1000 rows)のように行数が表示されます。

多くの方は意識せずに使っていますが、ページャーは通常「1画面分だけを表示し、スクロールできる」だけのシンプルな機能しかありません。

ただ、1行が長い場合は、折り返されて表示されるため、「表」が見づらくなっています。ページャーを使用している場合は、折り返さない表示にでき、きれいに表示されますが、全部の列が表示されなくて横スクロールをする必要があります。

/ov/psql/psql01.png /ov/psql/psql01.png

これまでのページャーでも縦スクロールと横スクロールは可能でしたが、内容に関係なく、ただスクロールしていたため縦スクロール時には、列名が見えなくなり、横スクロールでは同時に見たい列が近くにある必要がありました。例えばID等は左端に表示されることが多いですが、横スクロールしてしまうと、そのID列が見えなくなってしまいます。

全部の列を表示するためには折返し表示をしないといけませんが、そうすると、どの行のどの列がどの値なのか、わかりにくくなります。

このため、横一列で表示しきれないときには\xを使って、縦に表示する方法がありました。

この場合は、1画面で表示できる行が減ってしまう問題がありました。

ovを使用した表示

ovでは、このようなテーブル構造の表示のために便利な機能が備わっています。

まず、縦スクロールしても、最初に表示される列名が常に表示されるようにヘッダー機能があります。PostgreSQLの結果は1行のヘッダーがあるので、-H1で指定します。

次に、列の区切り文字を指定するために、-d "|"で区切り文字を指定します。これにより、各列が|で区切られていることを認識します。 さらに、--column-modeを指定することで、選択した列をハイライト表示できます。

/ov/psql/psql02.png /ov/psql/psql02.png

これにより横スクロールが列単位でスクロールできるようになります。

/ov/psql/psql03.png /ov/psql/psql03.png

さらに、--column-rainbowを指定することで、各列の色を変えることができます。これにより、どの列がどの値なのかがわかりやすくなります。

また、--alignを指定することで、列の内容を整列させることができます。これはCSVなどの列が縦に揃っていない場合も含めて整列させる機能です。これにより縦が揃っていることが保証されるので、列を指定して、その列が常に表示される(ヘッダー列)ようにできたり、その列をに置き換えたり(縮小と呼ばれます)できます。

/ov/psql/psql04.png /ov/psql/psql04.png

縮小は固定された列にも適用できるため、例えば、IDは必要なくタイトルと他の項目を合わせて見たいといった場合に便利です。

/ov/psql/psql05.png /ov/psql/psql05.png

操作は列を選択しているところで、sキーを押すと縮小されます。縮小された列は、で表示されます。もう一度sキーを押すと、縮小が解除されます。 さらに、Fキーを押すと、その列より左側のすべての列が固定され、横スクロールしても常に表示されます。

/ov/psql/psql06.png /ov/psql/psql06.png

ovでは折返し表示と折り返さない表示がwで簡単に切り替えられるため、折り返し表示をしつつ縮小表示も可能です(横スクロールしないため、列の固定には意味がありません)。 また、その際に行を交互に色分けすると、さらに見やすくなります(-Cオプション)。

/ov/psql/psql07.png /ov/psql/psql07.png

操作のアニメーション

psql-shrink psql-shrink

検索

ページャーには検索機能があります。クエリーの検索条件により表示する行を絞り込むのが通常ですが、クエリーを実行してしまった後に表示が多すぎてしまったことに気づくこともあります。クエリーの実行をやり直すのが面倒な場合は、ページャーの検索機能を使うと便利です。

/キーを押すと、検索モードになります。ここで、検索したい文字列を入力してEnterキーを押すと、該当する行がハイライトされます。 さらに、nキーを押すと次の該当行に移動し、Nキーを押すと前の該当行に戻ります。

フィルター

&キーを押すと、フィルター機能が有効になります。ここで、フィルター条件を入力すると、該当する行のみが表示されます。 ovでヘッダーを指定している場合、フィルター後もヘッダーが表示されます。 また&キー後の入力モードのときに!キーを押すと検索条件が反転されます。つまり、フィルター条件に合致しない行のみが表示されます。

終了時の表示

ページャーを終了すると、通常は画面がクリアされ、クエリーを実行したときの画面に戻ります。 ページャーは一般的には、qで終了する代わりにQキーで終了すると、画面がクリアされずに最後に表示した画面を残して終了します。 ovでは、Qキーで終了すると、最後に表示していた画面を検索や列のハイライトも含めてそのまま残して終了するようになっています(これは設定やショートカットキーにより変更可能です)。

ステータスライン

v0.42.0から、ステータスラインを隠すことができるようになりました。 --status-line=falseを指定すると、ステータスラインが常に表示されることはなくなり、検索などの入力が必要なときのみ表示されます。

ov --status-line=false

これは、ctrl+F10キーでも切替可能です。

watch(PostgreSQL 15)

PostgreSQL 15からはwatchが利用できます。watchは、指定したコマンドを定期的に実行し、その結果を表示するツールです。これにより、データベースの状態をリアルタイムで監視できます。 PSQL_WATCH_PAGER には以下の設定を推奨します。 これにより空行で区切られた最後のセクションを表示し続けます。

PSQL_WATCH_PAGER='ov --follow-section --section-delimiter "^$"'

watch watch

expanded output (\x)

拡張出力(\x)で表示のときには、レコード区切りをセクション区切りとして扱うと、レコード区切りでスクロールするため、見やすくなります。以下のコマンドで拡張出力モードを有効にできます。

PAGER='ov -F --section-delimiter "^-"'

\\x \\x

(\x)と\watchを組み合わせることもできます。

watch2 watch2

unaligned (\a)

psql側で\aを指定して、アラインメントなし(列を揃えない)表示にしてもov--alignオプションを指定することで列を揃えることができます。以下のように、psqlでアラインメントなしモードを有効にします。

PSQL_PAGER='ov -F -C -d "|" -H1 --column-rainbow --align'

unalign unalign