Psql(PostgreSQLクライアント)が通知を出力しないようにするにはどうすればよいですか?例えば.
psql:schema/auth.sql:20:注意:CREATE TABLE/PRIMARY KEYはテーブル "users"の暗黙的なインデックス "users_pkey"を作成します
私の意見では、プログラムにエラーがないか、何かを出力する何らかの理由がない限り、プログラムは沈黙しているべきです。
SET client_min_messages TO WARNING;
That はセッションに対してのみ設定するか、 ALTER ROLE
または ALTER DATABASE
。
または、それを "。psqlrc" に入れることもできます。
おそらく最も包括的な説明は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
使用する --quiet
psqlを起動したとき。
通知は無用ではありませんが、それは私の観点です。
このスレッドで提案されているさまざまなソリューション(およびその順列)を試しましたが、PSQLの出力/通知を完全に抑制することはできませんでした。
私はclaws2postgres.sh
BASHスクリプトを実行します。このスクリプトはいくつかの予備処理を行い、PSQL .sqlスクリプトを呼び出して実行し、1000のエントリをPostgreSQLに挿入します。
...
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 ... ]
[〜#〜] solution [〜#〜]
この修正された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回再生して通知します出力ファイル:
[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
参考文献
[関連SO thread] Postgresql-ファイルから読み込むときにINSERTステートメントの表示を無効にする方法はありますか?
[ソリューションに関連] https://askubuntu.com/questions/350208/what-does-2-dev-null-mean
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.
postgresql.conf
パラメーターを変更して、グローバルclient_min_messages
ファイルで設定することもできます。
例:
client_min_messages = warning