transactions - 检测错误以决定是回滚还是提交

标签 transactions postgresql

我试图通过在文件中生成一系列 SQL 命令以提供给 psql 进行处理来尽可能地偷懒。简而言之,我正在从外部来源加载一系列导入表(已经通过 COPY 完成),然后在最后一步中,删除/更新/插入记录到主表中(这在功能上也已完成)。

唯一阻止我成功(并能够通过 shell 脚本中的一系列命令执行所有操作)的事实是,有时操作会出现引用完整性错误,因此我必须回滚所有操作,直到可以识别和更正来源。

那么有什么方法可以从 psql 处理的脚本中知道是否发生错误并执行回滚?如果没有错误,请提交。

我总是可以通过切换到更高级的语言来解决问题,打开一个连接并运行每个语句并检查错误,但如果可能的话,我想避免的只是更多的工作代码。

最佳答案

如果您使用的是 psql,您可以使用 -1 命令行选项,并以以下方式启动您的文件:

\设置 ON_ERROR_STOP

这应该将整个 session 包装在一个事务中,并在遇到错误时立即退出。

关于transactions - 检测错误以决定是回滚还是提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1509645/

相关文章:

jboss - 使用 javax.transaction.UserTransaction 在 EJB 中实现事务

ruby-on-rails - Heroku Postgres 使用 pg_stat_statements 进行性能监控

java - JPA - 创建了错误的表

postgresql - 以编程方式为 Postgres JDBC 生成一个 `DataSource` 对象

sql - 如何更好的优化SQL查询?

ruby-on-rails - 查询嵌套的 jsonb Postgres 列

mysql - 当其中一条语句在 MySQL 中失败时,事务不会回滚

java - 顺序 JDBC 语句执行不进行事务处理

django - 在 Django 中提交事务后运行代码

django - django中业务逻辑放在哪里