PostgreSQL サーバーでスクリプトを実行しています。
psql db -f sql.sql
スクリプトから、bash
またはcron
スクリプト内で。
more
またはを使用して出力をページ分割しようとし続けless
ます。
で結果のページネーションを無効にするにはどうすればよいpsql
ですか?
私がやりたいのはデータを変更することだけで、出力は気にしません。
PostgreSQL サーバーでスクリプトを実行しています。
psql db -f sql.sql
スクリプトから、bash
またはcron
スクリプト内で。
more
またはを使用して出力をページ分割しようとし続けless
ます。
で結果のページネーションを無効にするにはどうすればよいpsql
ですか?
私がやりたいのはデータを変更することだけで、出力は気にしません。
ページネーションを無効にして出力を保持するには、次を使用します。
\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
ただし、何かがうまくいかないことを警告する可能性のあるエラー情報が破棄されるため、お勧めしません。また、結果を出しては捨てることになりますが、これは非効率的です。クエリを調整して、そもそもそれらを生成しない方がよいでしょう。
私もこれを探していました.ServerFaultに関する同様の質問で方法を見つけました:
psql -P pager=off <other params>
出力を抑制せずに、ページングをオフにします。
シェルである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
psql db -f sql.sql > /dev/null