脚本执行打印我脚本中的每个“DO”

Posted

技术标签:

【中文标题】脚本执行打印我脚本中的每个“DO”【英文标题】:Script execution prints every "DO" from my script 【发布时间】:2015-01-13 08:32:19 【问题描述】:

对于迁移,我为每个实体自动构建了包含匿名块的脚本,以更新并为结果保留一个日志表。

DO $$
DECLARE productId varchar;
BEGIN
  productId := getProductId('9783980493017');
  update product set ...;
  ...
EXCEPTION
  WHEN OTHERS THEN
  insert into mig_messages(createddate,identifier,message)
  values(now(), '9783980493017', SQLERRM);
END $$;

到目前为止,这工作正常。但是当我使用 psql 运行这些脚本时,每个DO 都会打印在提示符上。这听起来有点傻,但是有很多脚本,里面有很多产品更新块(大约 500 万或更多)。如何在不将其完全重定向到 /dev/null 或将 psql 切换为静默的情况下抑制此输出?最后可能会有一些我想查看的输出(错误、警告等)。

【问题讨论】:

--quiet 参数做你想做的事吗? @a_horse_with_no_name --quiet 是否仍然打印错误消息?我对丢失的连接或不是由我的脚本本身生成的其他“硬”错误特别感兴趣。 好的,确实如此;我已经尝试过了,它打印了一个语法错误。谢谢:) 【参考方案1】:

我会在脚本前面加上这一行:

SET client_min_messages=WARNING

或者在环境中使用该设置启动psql(我在 bash 中使用它)。

env PGOPTIONS='-c client_min_messages=WARNING' psql ...

这样您仍然会收到严重程度为 WARNING 或更高的消息。 相关:

How to suppress INFO messages when running psql scripts

Reduce bothering notices in plpgsql

【讨论】:

以上是关于脚本执行打印我脚本中的每个“DO”的主要内容,如果未能解决你的问题,请参考以下文章

检查Windows脚本中目录中的所有文件[重复]

Shell脚本----循环!

批处理脚本遍历指定文件夹下的文件

shell脚本调试打印日志问题

shell脚本实例

Apache 未在包含的 perl 脚本中执行“do”包含函数