我试图通过在文件中生成一系列 SQL 命令以提供给 psql
进行处理来尽可能地偷懒。简而言之,我正在从外部来源加载一系列导入表(已经通过 COPY 完成),然后在最后一步中,删除/更新/插入记录到主表中(这在功能上也已完成)。
唯一阻止我成功(并能够通过 shell 脚本中的一系列命令执行所有操作)的事实是,有时操作会出现引用完整性错误,因此我必须回滚所有操作,直到可以识别和更正来源。
那么有什么方法可以从 psql
处理的脚本中知道是否发生错误并执行回滚?如果没有错误,请提交。
我总是可以通过切换到更高级的语言来解决问题,打开一个连接并运行每个语句并检查错误,但如果可能的话,我想避免的只是更多的工作代码。
最佳答案
如果您使用的是 psql,您可以使用 -1 命令行选项,并以以下方式启动您的文件:
\设置 ON_ERROR_STOP
这应该将整个 session 包装在一个事务中,并在遇到错误时立即退出。
关于transactions - 检测错误以决定是回滚还是提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1509645/