psql
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画面分を表示して次の操作を待ちます。
最初の行にヘッダーとして列名が表示され、その下の行で列の区切りとして-
と+
による線が引かれています。各列は |
で区切られています。
結果の行が終わると(1000 rows)
のように行数が表示されます。
多くの方は意識せずに使っていますが、ページャーは通常「1画面分だけを表示し、スクロールできる」だけのシンプルな機能しかありません。
ただ、1行が長い場合は、折り返されて表示されるため、「表」が見づらくなっています。ページャーを使用している場合は、折り返さない表示にでき、きれいに表示されますが、全部の列が表示されなくて横スクロールをする必要があります。
これまでのページャーでも縦スクロールと横スクロールは可能でしたが、内容に関係なく、ただスクロールしていたため縦スクロール時には、列名が見えなくなり、横スクロールでは同時に見たい列が近くにある必要がありました。例えばID等は左端に表示されることが多いですが、横スクロールしてしまうと、そのID列が見えなくなってしまいます。
全部の列を表示するためには折返し表示をしないといけませんが、そうすると、どの行のどの列がどの値なのか、わかりにくくなります。
このため、横一列で表示しきれないときには\x
を使って、縦に表示する方法がありました。
この場合は、1画面で表示できる行が減ってしまう問題がありました。
ovを使用した表示
ov
では、このようなテーブル構造の表示のために便利な機能が備わっています。
まず、縦スクロールしても、最初に表示される列名が常に表示されるようにヘッダー機能があります。PostgreSQLの結果は1行のヘッダーがあるので、-H1
で指定します。
次に、列の区切り文字を指定するために、-d "|"
で区切り文字を指定します。これにより、各列が|
で区切られていることを認識します。
さらに、--column-mode
を指定することで、選択した列をハイライト表示できます。
これにより横スクロールが列単位でスクロールできるようになります。
さらに、--column-rainbow
を指定することで、各列の色を変えることができます。これにより、どの列がどの値なのかがわかりやすくなります。
また、--align
を指定することで、列の内容を整列させることができます。これはCSVなどの列が縦に揃っていない場合も含めて整列させる機能です。これにより縦が揃っていることが保証されるので、列を指定して、その列が常に表示される(ヘッダー列)ようにできたり、その列を…
に置き換えたり(縮小と呼ばれます)できます。
縮小は固定された列にも適用できるため、例えば、IDは必要なくタイトルと他の項目を合わせて見たいといった場合に便利です。
操作は列を選択しているところで、s
キーを押すと縮小されます。縮小された列は、…
で表示されます。もう一度s
キーを押すと、縮小が解除されます。
さらに、F
キーを押すと、その列より左側のすべての列が固定され、横スクロールしても常に表示されます。
ov
では折返し表示と折り返さない表示がw
で簡単に切り替えられるため、折り返し表示をしつつ縮小表示も可能です(横スクロールしないため、列の固定には意味がありません)。
また、その際に行を交互に色分けすると、さらに見やすくなります(-C
オプション)。
操作のアニメーション
検索
ページャーには検索機能があります。クエリーの検索条件により表示する行を絞り込むのが通常ですが、クエリーを実行してしまった後に表示が多すぎてしまったことに気づくこともあります。クエリーの実行をやり直すのが面倒な場合は、ページャーの検索機能を使うと便利です。
/
キーを押すと、検索モードになります。ここで、検索したい文字列を入力して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 "^$"'
expanded output (\x)
拡張出力(\x)で表示のときには、レコード区切りをセクション区切りとして扱うと、レコード区切りでスクロールするため、見やすくなります。以下のコマンドで拡張出力モードを有効にできます。
PAGER='ov -F --section-delimiter "^-"'
(\x)と\watch
を組み合わせることもできます。
unaligned (\a)
psql側で\a
を指定して、アラインメントなし(列を揃えない)表示にしてもov
の--align
オプションを指定することで列を揃えることができます。以下のように、psql
でアラインメントなしモードを有効にします。
PSQL_PAGER='ov -F -C -d "|" -H1 --column-rainbow --align'