158

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

psql db -f sql.sql

スクリプトから、bashまたはcronスクリプト内で。

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

で結果のページネーションを無効にするにはどうすればよいpsqlですか?

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

4

7 に答える 7

266

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

\pset pager off

この設定を記憶するには、次のように~/.psqlrcに追加します。echo \\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

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

于 2012-06-25T04:19:07.490 に答える
130

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

psql -P pager=off <other params>

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

于 2013-03-25T17:49:08.290 に答える
12

シェルであるbashには、その出力データをリダイレクトできる2つのストリームがあります。stdoutとstderrです。この出力はどこかにリダイレクトする必要があるため、Linuxには/dev/nullから到達可能な特定の「すべてを破棄する」ノードがあります。あなたがそこに送ったものはすべて、虚空に消えてしまいます。

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

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

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

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

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

ご覧のとおり、これは stdout がデフォルトです。ストリーム番号を使用したい場合は、ストリーム番号は使用されていません。

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

于 2012-06-24T23:24:11.087 に答える
5
psql db -f sql.sql > /dev/null
于 2012-06-24T18:42:14.397 に答える