脚本执行从我的脚本中打印每个 "DO"

Script execution prints every "DO" from my script

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

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 切换为静默的情况下抑制此输出?最后可能会有一些我想看到的输出(错误、警告等)。

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

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