抑制"当前交易中止......" PostgreSQL中的消息

时间:2017-09-07 17:26:43

标签: postgresql transactions

我有一个非常大的SQL转储我正在努力。整体结构如下:

BEGIN;
SET CONSTRAINTS ALL DEFERRED;
INSERT …;
-- … ~300K insert operations
INSERT …;
COMMIT;

问题是如果任何单个语句中都有错误,那么就会显示错误,并为其后的EACH语句生成消息current transaction is aborted, commands ignored until end of transaction block

为什么它表现得如此古怪?有没有办法抑制以下消息?仅仅显示真实的错误消息并跳过事务执行就足够了。我不想看到~300K有意义的错误消息。

我是否需要以不同方式构建转储?或者我有可以使用的标志/选项吗?

1 个答案:

答案 0 :(得分:1)

据推测,您正在使用psql将查询发送到服务器 您可以将ON_ERROR_STOP内置变量设置为on

来自https://www.postgresql.org/docs/current/static/app-psql.html

  ON_ERROR_STOP

  By default, command processing continues after an error. When this
  variable is set to on, processing will instead stop
  immediately. In interactive mode, psql will return to the command
  prompt; otherwise, psql will exit, returning error code 3 to
  distinguish this case from fatal error conditions, which are
  reported using error code 1.

可以使用psql -v ON_ERROR_STOP=on -f script.sql从外部psql设置,也可以从脚本内部设置,也可以使用元命令\set ON_ERROR_STOP on以交互方式设置。

pg_dump没有选项可以自动将其添加到转储中(据我所知,它不会发出任何psql元命令,只有纯SQL命令)