回滚 psql 中的 \include 错误

han*_*ank 5 postgresql psql transaction postgresql-9.2

我正在尝试在单个事务中执行 sql 脚本文件。该文件包含一些其他脚本的包含,这些脚本在我的示例中创建了一些表。它看起来像这样:

\include ../tables/table1.cre
\include ../tables/table2.cre
...
\include ../tables/table10.cre
Run Code Online (Sandbox Code Playgroud)

我正在使用psql

psql -X --set AUTOCOMMIT=off --set ON_ERROR_STOP=on -e --single-transaction -d my_db -f my_script.sql
Run Code Online (Sandbox Code Playgroud)

问题是 include meta 命令的错误不会导致事务回滚。例如,如果某些 tableX.cre 文件丢失,则将提交其包含之前的任何更改。但是,如果有一些 SQL 语法错误,一切都会按预期工作。

是否有可能以某种方式处理包含相关错误并回滚活动事务?

我正在使用 PostgreSQL 9.2.1。

han*_*ank 0

最后我在 Adrian Klaver 的 pgsql-general 邮件列表中得到了答案(链接

--set ON_ERROR_STOP=on同时使用和选项会出现某种意外行为--single-transaction。这ON_ERROR_STOP停止处理,但不会回滚当前事务。

因此,我最初问题的解决方案将删除该single-transaction选项并在我的主脚本周围包装显式的 BEGIN/COMMIT 语句。