psqlの代替出力形式


316

UbuntuでPostgreSQL 8.4を使用しています。列c1からまでのテーブルがありますcN。列は十分に広いため、すべての列を選択すると、クエリ結果の行が複数回折り返されます。その結果、出力が読みにくくなります。

クエリ結果が数行のみで構成されている場合、各行の各列が別々の行に表示されるようにクエリ結果を表示できれば便利です。たとえば、

 c1: <value of row 1's c1>
 c2: <value of row 1's c1>
 ...
 cN: <value of row 1's cN>
 ---- some kind of delimiter ----
 c1: <value of row 2's c1>
 etc.

追加のソフトウェアをインストールしないサーバーでこれらのクエリを実行しています。そのようなことをさせるpsql設定はありますか?

回答:


532

ドキュメンテーションをじっと見つめるのにもっと時間を費やす必要がありました。このコマンド:

\x on

私が望んでいたことを正確に行います。次に出力例を示します。

select * from dda where u_id=24 and dda_is_deleted='f';
-[ RECORD 1 ]------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
dda_id             | 1121
u_id               | 24
ab_id              | 10304
dda_type           | CHECKING
dda_status         | PENDING_VERIFICATION
dda_is_deleted     | f
dda_verify_op_id   | 44938
version            | 2
created            | 2012-03-06 21:37:50.585845
modified           | 2012-03-06 21:37:50.593425
c_id               | 
dda_nickname       | 
dda_account_name   | 
cu_id              | 1
abd_id             | 

8
ラップされた\ psetフォーマットを試すこともできます(許可されるフォーマットは、アラインされていない、アラインされている、ラップされている、html、latex、troff-msです)。表示が十分に狭い場合は、各列をワードラップします。
ブライス

12
\x値を切り替えるだけで、キーストロークを3回節約できます。(ワイド出力とナロー出力をすばやく切り替える場合に役立ちます)。
msanford 2015

7
\GMysqlに相当するものを探している場合は\x\g\x、クエリの最後に追加するか、~/.psqlrc追加のショートカットを定義してから、最後に\set G '\\set QUIET 1\\x\\g\\x\\set QUIET 0'使用してください:G。(セミコロンのノート欠如)
SławomirLenart

5
\x onコマンドラインで" "または同等のものをなんとかして渡すことは可能ですか?(たとえば、bashシェルエイリアスを使用して)保存して、psql --something常にデフォルトでオプションがオンになっていると便利です。
machineghost

2
@machineghost Use -P expanded=autoor--pset expanded=auto
alecdwm

269

(新規)拡張自動モード:\ x auto

Postgresql 9.2の新機能。PSQLは自動的にレコードを画面の幅に合わせます。以前は、拡張モードをオンまたはオフにするだけで、必要に応じてモードを切り替える必要がありました。

  • レコードが画面の幅に収まる場合。psqlは通常のフォーマットを使用します。
  • レコードが画面の幅に収まらない場合。psqlは拡張モードを使用します。

これを使用するには:\ x auto

PSQLコマンドに関するPostgresql 9.5ドキュメント。


ワイドスクリーン、通常のフォーマット:

 id | time  |       humanize_time             | value 
----+-------+---------------------------------+-------
  1 | 09:30 |  Early Morning - (9.30 am)      |   570
  2 | 11:30 |  Late Morning - (11.30 am)      |   690
  3 | 13:30 |  Early Afternoon - (1.30pm)     |   810
  4 | 15:30 |  Late Afternoon - (3.30 pm)     |   930
(4 rows)

狭い画面、拡張されたフォーマット:

-[ RECORD 1 ]-+---------------------------
id            | 1
time          | 09:30
humanize_time | Early Morning - (9.30 am)
value         | 570
-[ RECORD 2 ]-+---------------------------
id            | 2
time          | 11:30
humanize_time | Late Morning - (11.30 am)
value         | 690
-[ RECORD 3 ]-+---------------------------
id            | 3
time          | 13:30
humanize_time | Early Afternoon - (1.30pm)
value         | 810
-[ RECORD 4 ]-+---------------------------
id            | 4
time          | 15:30
humanize_time | Late Afternoon - (3.30 pm)
value         | 930

\ x autoでpsqlを起動する方法は?

\x auto起動時にコマンドを.psqlrcホームフォルダーに追加し、psqlを再起動して構成します。詳細については、psqlドキュメントの「ファイル」セクションをご覧ください

〜/ .psqlrc

\x auto

70

あなたには非常に多くの選択肢があり、どのように混乱するのでしょう:-)?主なコントロールは次のとおりです。

# \pset format
# \H
# \x
# \pset pager off

それぞれに他のオプションと相互作用があります。最も自動化されたオプションは次のとおりです。

# \x off;\pset format wrapped
# \x auto

新しい「\ x auto」オプションは、「必要な場合のみ」行ごとの表示に切り替えます。

-[ RECORD 1 ]---------------
id          | 6
description | This is a gallery of oilve oil brands.
authority   | I love olive oil, and wanted to create a place for
reviews and comments on various types.
-[ RECORD 2 ]---------------
id          | 19
description | XXX Test A 
authority   | Testing

以前の「ラップされた\ pset形式」は、データを画面にきれいに収めようとする点で似ていますが、ヘッダーが合わない場合は、整列されていない状態に戻ります。これがラップされた例です:

 id |          description           |            authority            
----+--------------------------------+---------------------------------
  6 | This is a gallery of oilve     | I love olive oil, and wanted to
    ; oil brands.                    ;  create a place for reviews and
    ;                                ;  comments on various types.
 19 | Test Test A                    | Testing

\x auto\pset pager offいいです。
mitnk

ある\x off; \pset format wrapped\x auto一緒に使用することを意図し、又はそれらは相互に排他的ですか?
デミトリ

20

興味深いのは、折りたたむことなくテーブルを水平に見ることができることです。PAGER環境変数を使用できます。psqlはそれを利用します。あなたが設定することができます

export PAGER='/usr/bin/less -S'

またはless -S、適切な場所にない場合は、コマンドラインで既に使用できる場合に限ります。-Sは、展開された行を表示します。カスタムビューアやその他のオプションを渡すことができます。

私はPsql Horizo​​ntal Displayでもっと書きました


1
答えは本当にいいです。高くマークされていないことに驚いています。端末で作業する人に最適です。
LUser

これは非常に役に立ちました
Merlin

これは便利ですが、どのように右にスクロールしますか?
Niel de Wet

18

pspg は、高度な表のフォーマット、水平スクロール、検索などの機能を提供するシンプルなツールです。

git clone https://github.com/okbob/pspg.git
cd pspg
./configure
make
make install

次に、PAGER変数を必ず更新してください。~/.bashrc

export PAGER="pspg -s 6" 

ここで、-sはカラースキーム(1-14)を表します。pgdgリポジトリを使用している場合は、(Debianのようなディストリビューションに)パッケージをインストールするだけです。

sudo apt install pspg

pspgの例


7

また、HTML出力のオン/オフを切り替える\ Hも必ずチェックアウトしてください。コンソールで読むのは必ずしも簡単ではありませんが、ファイルにダンプしたり(\ oを参照)、エディタ/ブラウザウィンドウに貼り付けて表示したりするのは興味深いです。特に、比較的複雑なデータが複数行ある場合に便利です。


1

zenityを使用して、クエリ出力をHTMLテーブルとして表示できます。

  • 最初に次のコードでbashスクリプトを実装します。

    cat> '/tmp/sql.op'; zenity --text-info --html --filename = '/ tmp / sql.op';

    mypager.shのように保存します

  • 次に、スクリプトの完全パスを値として設定して、環境変数PAGERをエクスポートします。

    例:-export PAGER = '/ path / mypager.sh'

  • 次に、psqlプログラムにログインし、\ Hコマンドを実行します。

  • そして最後に任意のクエリを実行すると、テーブル化された出力がHTMLテーブル形式でzenityに表示されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.