【问题标题】:A transactional Rollback of a liquibase changesetliquibase 变更集的事务回滚
【发布时间】:2014-04-24 00:59:17
【问题描述】:

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

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

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

非常感谢任何提示

【问题讨论】:

    标签: liquibase


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-04
      • 1970-01-01
      • 2016-05-29
      • 1970-01-01
      • 2017-09-17
      • 1970-01-01
      • 2018-01-01
      • 1970-01-01
      相关资源
      最近更新 更多