pg_dumpをログファイルである2つの異なるpsqlに渡しますが、コンソールには渡さない

pg_dumpをログファイルである2つの異なるpsqlに渡しますが、コンソールには渡さない

pg_dumpを2つのpsqlファイルとログファイルにプッシュしようとしていますが、端末にノイズを追加したくありません。

このツールに関する多数の投稿を作成した後、teeこのコマンドに達しました。うまくいきますが、コンソールがまだフラッディングされているだけです。

pg_dump -a -t table-country -p 5432 -U usr db-maint2  2>&1 | tee >(psql -p 5432 -U postgres db-project) >(psql -p 5432 -U postgres db-gp-projet) >"initDB_$(date +%Y%m%d_%H%M).log"

読みましたが、より良い解決策が見つかりませんでした。

また、私のコマンドの後、pg_dumpの標準出力はコンソールに表示されますが、両方のpsqlのログはログファイルではなく端末にのみ送信されます。

編集:良いです。 psqlをログファイルに出力する方法を見つけました。

pg_dump -a -t table-country -p 5432 -U usr db-maint2  2>&1 | tee >(psql -p 5432 -U postgres db-project >"initDB_$(date +%Y%m%d_%H%M).log") >(psql -p 5432 -U postgres db-gp-projet >"initDB_$(date +%Y%m%d_%H%M).log") >"initDB_$(date +%Y%m%d_%H%M).log"

実際、これはpsqlコマンドの1つだけを記録し、-ateeを使用してハンドルを追加しても、file.logにはpsql出力のみが生成されます。

N番目の編集:もうアイデアはありません。

n^+1 編集: もちろん、私の脳はついに目覚めました。

ベストアンサー1

pg_dump -a -t table-country -p 5432 -U usr db-maint2  2>&1 | tee -a >"${LOGFILE}" >(psql -p 5432 -U postgres db-project >>"${LOGFILE}") >(psql -p 5432 -U postgres db-gp-projet >>"${LOGFILE}") 

なぜ?

左から右へ:

  1. pg_dump標準出力に移動
  2. 2>&1エラーストリームを標準出力にダンプする
  3. |パイプ標準出力とエラー
  4. to tee -a、パイプの内容を保存し、複数のコマンドに渡します(最小の追加オプションを使用して最初に渡すとき)。
  5. >"${LOGFILE}"まず、pg_dump stdoutまたはerroutを記録したいと思います。次の構文に注意してください。()ファイル名の周りには何もありません。私のスクリプトで変数を使用しています。
  6. >(psql -p 5432 -U postgres db-project >>"${LOGFILE}")次に、psqlコマンドで最初のCOPY(角括弧で囲まれたコマンド)
  7. >>"${LOGFILE}"前の行では、psqlの標準出力を私のファイルに追加(二重)するために使用しました>。ここではエラーは発生しません。可能です。
  8. >(psql -p 5432 -U postgres db-gp-projet >>"${LOGFILE}")次に、2番目のpsqlコマンドが提供され、stdoutがログファイルに2番目に追加されます。
  9. コンソールへの出力はなく、すべてがteeによって保存されているようです(正直なところ、なぜそうなのかわかりません)。

一部の人々がティーとパイプのユースケースを理解するのに役立つことを願っています。

編集:私の最後のコマンドは

pg_dump -a -t table-country -p 5432 -U usr db-maint2  2>&1 | tee -a > /dev/null >(psql -p 5432 -U postgres db-project >>"${LOGFILE}") >(psql -p 5432 -U postgres db-gp-projet >>"${LOGFILE}")

ログファイルを汚染するのではなく、標準出力を削除します。エラーストリームをログファイルに保存することをお勧めします

pg_dump -a -t table-country -p 5432 -U usr db-maint2  2>"${LOGFILE}" | tee -a > /dev/null >(psql -p 5432 -U postgres db-project >>"${LOGFILE}") >(psql -p 5432 -U postgres db-gp-projet >>"${LOGFILE}")

しかし、まだテストしていません。

おすすめ記事