psqlのPAGERを設定する
psqlのPAGERを設定する
PAGERをoff/onにする
psqlでは pset値により、PAGERをon/off/alwaysにすることができます。alwaysにすると、psql起動時に出力が画面に収まっても常にPAGERが起動します。
オプションで一時的にPAGERをoffにするには以下のようにします(以降offの部分はonやalwaysが指定できる)。
psql -P pager=off
.psqlrcファイルに設定すれば以後ずっとPAGERをoffになります。
\pset pager off起動後にPAGERをoffにする(psqlで接続後に実行する)には\psetコマンドを使用します。
# \pset pager off\pset pagerを引数なしで実行するとトグルになり、実行するとon/offが切り替わります。
# \pset pager
Pager usage is off.
# \pset pager
Pager is used for long output.PostgreSQL 15.0からの追加機能
PostgreSQL 15.0からは、pager_min_linesが追加され、画面に収まらない場合に何行以上だったらPAGERを起動するか行数を指定できます。デフォルトは0で、画面に収まらない場合にPAGERを起動します(画面に収まる行数を指定しても無効になる)。
pager_min_linesよりもpset pager=alwaysの方が優先されます。
ターミナルのスクロール等でさかのぼれない場合のみPAGERを起動したい場合に便利です。
psql -P pager_min_lines=10000
pset値なので、.psqlrcや起動後に実行することもできます。
\pset pager_min_lines 10000# \pset pager_min_lines 10000psetの値は、\psetを実行すると表示されます。pagerの値はoff=0, on=1, always=2になります。
# \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 10000
recordsep '\n'
recordsep_zero off
tableattr
title
tuples_only off
unicode_border_linestyle single
unicode_column_linestyle single
unicode_header_linestyle singlePAGERを変更する
psqlでは、PSQL_PAGER又はPAGER環境変数により、PAGERを変更することができます。PAGERは汎用的な環境変数なので、psql以外のコマンドでも使用されるのでpsqlのみに適用したい場合は、PSQL_PAGERを使用します。
PSQL_PAGERとPAGER環境変数がセットされていない場合は、more又はlessがデフォルトのPAGERになる。lessがある場合は、lessが優先されます。
PSQL_PAGER=less psql
.psqlrcファイルの中で環境変数をセットできるので、以下の設定を入れると恒久的にPAGERを変更できます。
\setenv PSQL_PAGER lessPAGERの種類
psql向きのPAGERは、以下のようなものがあります。
moreは、多くの環境で入っているが、psqlのPAGERとしては使いにくいのでおすすめしません。
less
lessは古くからあるPAGERで、大抵はディストリビューションのパッケージになっているので簡単にインストールできます。
lessは、安定していて、これまで開発にそれほど変化はありませんでしたが、最近になってヘッダーオプションが追加されました。
バージョン600で、lessのヘッダーを表示するオプションが追加されたので、それ以降のバージョンであれば、以下のように設定するとpsqlのヘッダー(列名)の表示を固定できます。
PSQL_PAGER="less --header 2" psql
--header 2は、ヘッダーを2行固定表示するオプションです。--headerオプションを使用したときには、折返し表示をしないモードになります(-S相当)。
また、--header 2,14のように、2番目の引数を渡すと2行のヘッダーの固定表示に加えて、横スクロールするときに左側を幅14まで固定表示してスクロールできます。ただ、この左側の固定はテーブルによって列の幅は変わるので、オプションで渡すのは望ましくありません。
lessで表示しているときに、--headerと入力すると入力モードに切り替わるため、そのときに文字数を入力すると、その文字数で固定表示されます。
Header lines: 2,14ただ幅を文字数で指定する必要があるため、使いやすいとは言い難いです。
pspg
pspgはpsql用に作られたPAGERで、テーブルを表示するのに便利な機能があります。psqlの出力をアスキーテーブルの形式に変換して、列名がヘッダーとして表示されます。また、列を数字キー入力で簡単に固定表示できる(デフォルトで1が指定されているので、一番左の列が固定表示される)。
pspgはテーマがたくさん用意されていて変更できます。pspgのテーマは、pspg --themesで確認できます。
PSQL_PAGER=pspg psql
ov
ovは拙作の汎用PAGERでpsqlでの使用を想定して開発を開始しましたが、他の用途でも使えるようにオプションやキーにより必要な機能が切り替えられるようにしたため、汎用でありながらpsqlに向いた表示ができます。
PSQL_PAGER='ov -C -d "|" -H1 --column-mode --column-rainbow' psql
ヘッダー行の行数を指定(’-H1’)して、ヘッダー行を固定表示しています。ヘッダー行に対してスタイルを指定できるため、区切り文字(’-’)をヘッダーとして扱わなくても済むために1行のみにしています。
またColumn Modeを区切り文字(’-d “|”’)とともに指定することで、列の選択ハイライト表示が可能です。さらに--column-rainbowを追加すると列をそれぞれ別の色で表示できます。
--column-modeがあるためヘッダー行と折り返す表示の両方を同時に使用することができます。
ovで区切り文字で列を認識した場合は、縦に揃っていなくてもよいため、以下のように\aでalignを切り替えても問題ありません。
詳細はovのpsqlのページを参照して下さい。
PSQL_WATCH_PAGER
PostgreSQL 15.0からはPSQL_PAGERとは別にPSQL_WATCH_PAGERが追加されました。
psqlには\watchコマンドがあり、この前に実行したSQLを定期的に実行して結果を表示することができます。このときの表示にはPSQL_PAGERは使われません。通常PAGERは終了しないと次のSQLの結果を受け取れないため、\watchの自動で実行は相性が悪いためです。
ただPAGER側で終了しなくても\watchの結果を受け付け続けることができれば、\watchの結果をPAGERで表示できます。そのためにPSQL_WATCH_PAGERが追加されました。
PSQL_WATCH_PAGERにはpspgとovが指定できます。
pspgのWATCH対応
pspgをPSQL_WATCH_PAGERに指定するときに--streamオプションを付けます。
PSQL_WATCH_PAGER='pspg --stream' psql
SELECT * FROM pg_stat_activity;
\watch 1\watchにより pg_stat_activityの結果が1秒ごとに更新されます。
ovのWATCH対応
ovをPSQL_WATCH_PAGERに指定するときに--follow-sectionオプションと--section-delimiter "^$"を付けます。
--follow-sectionはovのオプションで、--section-delimiterで指定した区切り文字で区切られたセクションでフォローモードを有効にします。
--section-delimiterはovのオプションで、^$は空行を区切り文字として指定しています。
つまり空行がある位置までをスクロールして表示し、その後は空行がある位置までスクロールして表示を繰り返します。
PSQL_WATCH_PAGER='ov -w=f --follow-section --section-delimiter "^$" -d "|" --column-mode --column-rainbow' psql
さらに section-start(alt+s) でセクションの開始位置を指定することができます。セクションの開始位置を指定すると、その位置からスクロールして表示を繰り返します。





