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
--quiet
psql을 시작할 때 사용 합니다.
통지는 쓸모가 없지만 그것이 내 관점입니다.
이 스레드에서 제안 된 다양한 솔루션 (및 그 순열)을 시도했지만 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.wav
5 번 재생하여 알림 - 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
- [re: solution, above] PSQL: How can I prevent any output on the command line?
- [re: this SO thread] disable NOTICES in psql output
[related SO thread] Postgresql - is there a way to disable the display of INSERT statements when reading in from a file?
[relevant to solution] 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.
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
'developer tip' 카테고리의 다른 글
여러 조건이있는 if의 실행 순서 (0) | 2021.01.06 |
---|---|
Spring XML 컨텍스트에서 조건부 리소스 가져 오기를 수행하는 방법은 무엇입니까? (0) | 2021.01.06 |
루프에서 JavaScript 클로저의 사용을 설명하십시오. (0) | 2021.01.06 |
UNION 및 ORDER BY의 잘못된 사용? (0) | 2021.01.06 |
Python에서 산 세척 이해하기 (0) | 2021.01.06 |