67

psql(PostgreSQLクライアント)による通知の出力を停止するにはどうすればよいですか?例えば

psql:schema / auth.sql:20:注意:CREATE TABLE / PRIMARY KEYは、テーブル「users」の暗黙的なインデックス「users_pkey」を作成します

私の意見では、エラーやその他の出力理由がない限り、プログラムはサイレントである必要があります。

4

6 に答える 6

78
SET client_min_messages TO WARNING;

これは、セッションに対してのみ設定することも、またはで永続化することもできALTER ROLEますALTER DATABASE

または、それを「.psqlrc」に入れることもできます。

于 2010-08-20T13:32:10.160 に答える
65

おそらく最も包括的な説明は、Peter Eisentrautsのブログエントリアーカイブ)にあります。

元のブログを調べて消化することを強くお勧めしますが、最終的な推奨事項は次のようなものです。

PGOPTIONS='--client-min-messages=warning' psql -X -q -a -1 -v ON_ERROR_STOP=1 --pset pager=off -d mydb -f script.sql
于 2010-08-20T14:23:08.017 に答える
23

--quietpsqlを起動するときに使用します。

通知は役に立たないわけではありませんが、それが私の見解です。

于 2010-08-20T12:42:33.693 に答える
2

パラメータを変更することで、グローバルpostgresql.confファイルにも設定できclient_min_messagesます。

例:

client_min_messages = warning
于 2013-05-01T19:29:42.910 に答える
2

このスレッドで提案されたさまざまな解決策(およびその順列)を試しましたが、PSQLの出力/通知を完全に抑制することができませんでした。

いくつかの予備処理を実行してclaws2postgres.shからPSQL.sqlスクリプトを呼び出し/実行して、何千ものエントリをPostgreSQLに挿入するBASHスクリプトを実行しています。

...
PGOPTIONS="-c client_min_messages=error"
psql -d claws_db -f claws2postgres.sql

出力

[victoria@victoria bash]$ ./claws2postgres.sh
 pg_terminate_backend 
----------------------

DROP DATABASE
CREATE DATABASE
You are now connected to database "claws_db" as user "victoria".
CREATE TABLE
SELECT 1
INSERT 0 1
UPDATE 1
UPDATE 1
UPDATE 1
Dropping tmp_table
DROP TABLE

You are now connected to database "claws_db" as user "victoria".
psql:/mnt/Vancouver/projects/ie/claws/src/sql/claws2postgres.sql:33: NOTICE:  42P07: relation "claws_table" already exists, skipping
LOCATION:  transformCreateStmt, parse_utilcmd.c:206
CREATE TABLE
SELECT 1
INSERT 0 1
UPDATE 2
UPDATE 2
UPDATE 2
Dropping tmp_table
DROP TABLE

[ ... snip ... ]

解決

この変更されたPSQL行に注意してください。ここで、psql出力をリダイレクトします。

psql -d claws_db -f $SRC_DIR/sql/claws2postgres.sql &>> /tmp/pg_output.txt

リダイレクトは、すべての出力を出力ファイルに追加します。&>> /tmp/pg_output.txt出力ファイルは、ログファイルとしても機能します。

BASH端子出力

[victoria@victoria bash]$ time ./claws2postgres.sh
 pg_terminate_backend 
----------------------

DROP DATABASE
CREATE DATABASE
2:40:54                       ## 2 h 41 min
[victoria@victoria bash]$ 

進捗状況の監視:

別の端末で、を実行します

PID=$(pgrep -l -f claws2postgres.sh | grep claws | awk '{ print $1 }'); while kill -0 $PID >/dev/null 2>&1; do NOW=$(date); progress=$(cat /tmp/pg_output.txt | wc -l);  printf "\t%s: %i lines\n" "$NOW" $progress; sleep 60; done; for i in seq{1..5}; do aplay 2>/dev/null /mnt/Vancouver/programming/scripts/phaser.wav && sleep 0.5; done
...
Sun 28 Apr 2019 08:18:43 PM PDT: 99263 lines
Sun 28 Apr 2019 08:19:43 PM PDT: 99391 lines
Sun 28 Apr 2019 08:20:43 PM PDT: 99537 lines
[victoria@victoria output]$

  • pgrep -l -f claws2postgres.sh | grep claws | awk '{ print $1 }'$PIDに割り当てられたスクリプトPIDを取得します
  • while kill -0 $PID >/dev/null 2>&1; do ...:そのスクリプトの実行中に、実行します...
  • cat /tmp/pg_output.txt | wc -l:出力ファイルの行数を進行状況インジケーターとして使用します
  • phaser.wav完了したら、 5回再生して通知します
  • phaser.wav:https ://persagen.com/files/misc/phaser.wav

出力ファイル:

[victoria@victoria ~]$ head -n22 /tmp/pg_output.txt
You are now connected to database "claws_db" as user "victoria".
CREATE TABLE
SELECT 1
INSERT 0 1
UPDATE 1
UPDATE 1
UPDATE 1
Dropping tmp_table
DROP TABLE

You are now connected to database "claws_db" as user "victoria".
psql:/mnt/Vancouver/projects/ie/claws/src/sql/claws2postgres.sql:33: NOTICE:  42P07: relation "claws_table" already exists, skipping
LOCATION:  transformCreateStmt, parse_utilcmd.c:206
CREATE TABLE
SELECT 1
INSERT 0 1
UPDATE 2
UPDATE 2
UPDATE 2
Dropping tmp_table
DROP TABLE

参考文献

The > operator redirects the output usually to a file but it can be to a device. You can also use >> to append.
If you don't specify a number then the standard output stream is assumed but you can also redirect errors

  > file redirects stdout to file
  1> file redirects stdout to file
  2> file redirects stderr to file
  &> file redirects stdout and stderr to file

/dev/null is the null device it takes any input you want and throws it away. It can be used to suppress any output.
于 2019-04-29T16:48:16.860 に答える
1

私が持っていた特定のシナリオに役立つ提案を提供する:

  • Windowsコマンドシェルがpsql.exe呼び出しを呼び出して、1つの重要なSQLコマンドを実行します
  • 警告またはエラーのみを表示し、通知を抑制したい

例:

psql.exe -c "SET client_min_messages TO WARNING; DROP TABLE IF EXISTS mytab CASCADE"

(Windows環境変数としてPGOPTIONSを使用して動作させることができませんでした。正しい構文を実行できませんでした。さまざまな投稿から、複数のアプローチを試しました。)

于 2021-02-19T06:54:44.220 に答える