PostgreSQLはより多くの出力を無効にします


146

PostgreSQLサーバーでスクリプトを実行しています。

psql db -f sql.sql

bashかでcronスクリプトを実行します。

moreまたはで出力をページ分割しようとし続けlessます。

で結果のページ分割を無効にするにはどうすればよいpsqlですか?

私がやりたいのは、データを変更することだけです。出力については気にしません。

回答:


244

ページネーションを無効にて出力を保持するには、以下を使用します。

\pset pager off

この設定を記憶するには、それを〜/ .psqlrcに追加します。

psqlのマニュアルを参照してください。

古いバージョンのPgでは、これは単なる切り替えでした。 \pset pager

クエリ出力を完全に抑制するに\o /dev/nullは、psqlスクリプトで使用します。

psqlの情報出力を抑制するには、それを環境で実行する-qか設定QUIET=1します。


結果を生成して破棄するstdoutには/dev/null、次のようにリダイレクトできます。

psql db -f sql.sql >/dev/null

stdoutとstderrの両方を次のようにリダイレクトできます。

psql db -f sql.sql >&/dev/null

しかし、何かがおかしいと警告するかもしれないエラー情報を捨ててしまうので、私はそれをお勧めしません。また、結果を生成して破棄しますが、これは非効率的です。クエリを調整することで、そもそもそれらを作成しないだけの方がよいでしょう。


これはページャーの使用を停止しますが、出力は停止しません。私はあなたPAGER="/dev/null" psql db -P pager=always -f sql.sqlがそれを常に出力を殺すようにする必要があると思います。
Harald Brinkhof 2012年

112

私もこれを探していましたが、ServerFaultに関する同様の質問で方法を見つけました。

psql -P pager=off <other params>

出力を抑制せずにページングをオフにします。


4
この回答は、manページの-Pに関する何よりも役に立ちました。ありがとう!
通常、2016

それは私が正確に必要なものです。ありがとう:)
プラディップDas

13

ここに別のオプションがあります。これには、psqlオプション名などを覚えておく必要がないという利点があります。

psql ... | cat

絶対的助言!+1
2017年

11

bashが、されてシェル、2は持っているストリームあなたがその出力データをリダイレクトすることができます:stdoutとstderr、この出力ニーズがどこかにリダイレクトするため、Linuxはを通じて特定の「廃棄すべて」ノードの到達を持っては/ dev / nullに。そこに送ったものはすべて、空に消えるだけです。

(シェルにも入力ストリームがありますが、出力の抑制を要求したため、ここでは無視します)

これらのストリームは番号で表されます。1はstdout、2はstderrです。

したがって、stdoutだけをリダイレクトしたい場合は、<and >演算子を使用してそれを行います(基本的に、それが指す場所はデータのフロー先です)

stdoutを抑制したいとします(/ dev / nullにリダイレクトします)。

psql db -f sql.sql > /dev/null

これが標準出力がデフォルトであることを確認できるように、書き込みたいストリーム番号を使用したい場合、ストリーム番号は使用されていません。

psql db -f sql.sql 1> /dev/null

stderror(ストリーム番号2)を抑制したい場合は、

psql db -f sql.sql 2> /dev/null

また、あるストリームを別のストリームにリダイレクトすることもできます。たとえば、stderrorからstdoutにリダイレクトできます。これは、すべての出力を通常のエラーとエラーのどこかに保存する場合に便利です。

psql db -f sql.sql 2>&1 > log.txt

間にスペースがあってはいけません 2>&1

最後に、時には最も興味深いのは、&>「完全に静かに」したいときに、を使用してすべての出力を抑制できるという事実です。

psql db -f sql.sql &> /dev/null


1
この情報は原則的には健全ですが、psqlは情報メッセージをstderrに送信しないため、この特定のケースではまったく機能しません。それらはstdoutのデータと混在しています。
ジョナサンハートレイ

突然、私はあなたの要点がすべての出力を抑制することによって、ページャーを停止するためにOPが最後の「&>」ケースを使用できることを理解しています。なんらかの方法で回答を修正した場合は、反対票を削除します。
ジョナサンハートレイ


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