developer tip

psql 출력에서 ​​알림 비활성화

optionbox 2021. 1. 6. 08:03
반응형

psql 출력에서 ​​알림 비활성화


psql (PostgreSQL 클라이언트)이 알림을 출력하지 못하도록하려면 어떻게해야합니까? 예 :

psql : schema / auth.sql : 20 :주의 사항 : CREATE TABLE / PRIMARY KEY는 "users"테이블에 대해 암시 적 인덱스 "users_pkey"를 생성합니다.

내 생각에 프로그램은 오류가 없거나 출력해야 할 다른 이유가없는 한 침묵해야합니다.


SET client_min_messages TO WARNING;

세션에 대해서만 설정하거나 함께 지속 할 수 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

--quietpsql을 시작할 때 사용 합니다.

통지는 쓸모가 없지만 그것이 내 관점입니다.


이 스레드에서 제안 된 다양한 솔루션 (및 그 순열)을 시도했지만 PSQL 출력 / 알림을 완전히 억제 할 수 없었습니다.

claws2postgres.sh예비 처리를 수행 한 다음 PSQL .sql 스크립트를 호출 / 실행하여 1000 개의 항목을 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.wav5 번 재생하여 알림
  • phaser.wav: https://persagen.com/files/misc/phaser.wav

Output file:

[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

References

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.

It can be set in the global postgresql.conf file as well with modifiying the client_min_messages parameter.

Example:

client_min_messages = warning

ReferenceURL : https://stackoverflow.com/questions/3530767/disable-notices-in-psql-output

반응형