Database 禁用psql输出中的通知
如何阻止psql(PostgreSQL客户端)输出通知?e、 g psql:schema/auth.sql:20:注意:CREATE TABLE/PRIMARY键将为表“users”创建隐式索引“users\u pkey” 在我看来,一个程序应该是静默的,除非它有错误,或者有其他原因输出内容。启动psql时使用Database 禁用psql输出中的通知,database,postgresql,verbosity,Database,Postgresql,Verbosity,如何阻止psql(PostgreSQL客户端)输出通知?e、 g psql:schema/auth.sql:20:注意:CREATE TABLE/PRIMARY键将为表“users”创建隐式索引“users\u pkey” 在我看来,一个程序应该是静默的,除非它有错误,或者有其他原因输出内容。启动psql时使用--quiet 通知不是无用的,但这是我的观点 SET client_min_messages TO WARNING; 只能为会话设置或使用或使其持久化 或者你可以把它放在你的书里。也许
--quiet
通知不是无用的,但这是我的观点
SET client_min_messages TO WARNING;
只能为会话设置或使用或使其持久化
或者你可以把它放在你的书里。也许最全面的解释是关于彼得·艾森特() 我强烈建议对原始博客进行研究和消化,但最终建议如下:
PGOPTIONS='--client-min-messages=warning' psql -X -q -a -1 -v ON_ERROR_STOP=1 --pset pager=off -d mydb -f script.sql
它可以在全局
postgresql.conf
文件中设置,也可以通过修改client\u min\u messages
参数来设置
例如:
client_min_messages = warning
我尝试了这个线程中建议的各种解决方案(及其排列),但我无法完全抑制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 ... ]
[victoria@victoria bash]$ time ./claws2postgres.sh
pg_terminate_backend
----------------------
DROP DATABASE
CREATE DATABASE
2:40:54 ## 2 h 41 min
[victoria@victoria bash]$
解决方案
注意这一修改的PSQL行,其中我重定向了PSQL输出:
psql -d claws_db -f $SRC_DIR/sql/claws2postgres.sql &>> /tmp/pg_output.txt
&>/tmp/pg_output.txt
重定向将所有输出附加到输出文件,该文件也可以用作日志文件
BASH终端输出
[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 ... ]
[victoria@victoria bash]$ time ./claws2postgres.sh
pg_terminate_backend
----------------------
DROP DATABASE
CREATE DATABASE
2:40:54 ## 2 h 41 min
[victoria@victoria bash]$
监控进度:
[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
在另一个终端中,执行
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]$
获取分配给$PID的脚本PIDpgrep-l-f claws2postgres.sh | grep claws | awk'{print$1}'
:当脚本运行时,执行whilekill-0$PID>/dev/null 2>&1;执行…
:使用输出文件行计数作为进度指示器cat/tmp/pg_output.txt | wc-l
- 完成后,通过播放
5次来通知phaser.wav
- 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
参考资料
- [回复:解决方案,如上]
- [回复:这条线索]
- [相关SO线程]
- [与解决方案相关]
提供一个对我的特定场景有用的建议:
- Windows命令shell调用psql.exe调用以执行一个基本SQL命令
- 只希望看到警告或错误,并抑制通知
client_min_messages = warning
psql.exe-c“将客户端消息设置为警告;如果存在mytab级联,则删除表”
(我无法将PGOPTIONS作为Windows环境变量使用--无法计算出正确的语法。尝试了不同帖子中的多种方法。)有趣。。。这就关闭了所有的东西,比如
CREATE TABLE
,但不包括通知的内容
,我不确定我真的认为它们都是无用的。。。但我确实有一点信念(我想我是在一本必读的C或Unix书籍中读到的),程序应该是安静的,除非它们有问题或者你告诉它们不要这样。因此--quiet应该是默认值,并且应该有一个--verbose(可能有可定制的级别)通知对我来说仍然可见:SQL“altertablefoodropconstraint if exists check_-bar”。输出:“注意:关系“foo”的约束“check_bar”不存在,跳过“这删除了恼人的”寻呼机使用已关闭。“消息对我来说,因此我从现在开始在psql
脚本中使用-q
。谢谢。这也可以在postgresql.conf中更改。。。或者在connect
之后,通过任何DBI界面使用一些命令,如do
或execute
。感谢您分享这篇文章,它非常有帮助。一般不赞成只使用链接来回答,但我同意这是一篇非常有信息量的博客文章。请考虑提取一些关键点,并在答案中总结它们,以及链接。实际上,这个答案与@加文仅用相关的部分进行了相同的回答。