liquibase - liquibase 变更集的事务性回滚

标签 liquibase

我目前正在将 liquibase 与基于 SQL 的变更集一起使用,其中大多数都包含 INSERT 语句。根据文档,这种类型的更新操作不会产生(通过工具)自动回滚语句。

我的问题是(我可能遗漏了一些东西),因为我们可以声明某个变更集可以在数据库事务的上下文中运行,如果在应用变更集期间发生错误,该工具(liquibase)是否可以仅发出事务回滚对于这个特定的变更集?

我的情况是,目前所有这些脚本都是开发过程的一部分,这些脚本尚未最终确定,这意味着有人更改了内容,我们从头开始回复它们。如果在 2000 行插入脚本中 SQL 中存在错误,我希望该工具自动回滚当前事务而不提交数据库中的更改。

非常感谢您的任何提示

最佳答案

在更新过程中,liquibase 在一个事务中运行每个 changeSet,如果有任何错误,则将其回滚。因此,如果您有一个 2000 行的插入,但在中途出现错误,它将按预期失败并自动回滚。

没有自动生成的是 SQL 在插入后“回滚”(在这种情况下是删除)插入。如果您在 changeSet 中指定一个块,那么在更新成功执行并提交后,您可以稍后运行“liquibase rollback v2.3”,它将撤消自 v2.3 标签以来的更改。它不能依赖数据库回滚功能,因为它已经提交。

这可能有点令人困惑,因为在这种情况下回滚与事务上下文中术语“回滚”的正常数据库使用不同。

关于liquibase - liquibase 变更集的事务性回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22477794/

相关文章:

Azure Synapse Analytics 版本控制

gradle - liquibase gradle插件找不到方法

liquibase - 在回滚 block 中进行更正是否会影响 liquibase 变更集的校验和?

liquibase - 如何生成.sql格式的changlog文件?

oracle - 如何在liquibase中添加复合外键?

java - 设置 createDatabaseIfNotExist=true 后,Liquibase 未创建数据库

java - H2 - Oracle - liquibase - org.h2.jdbc.JdbcSQLException : Table "all_sequences" not found;

liquibase - 何时执行 Liquibase 更新

java - 获取删除触发器的当前用户 - Spring MyBatis - Liquibase