Liquibase 变更集仅作为单个事务执行

kdn*_*ton 3 java netbeans transactions liquibase maven

Liquibase 论坛的讨论中,开发人员Nathan Voxland表示 Liquibase 应该在每个变更集之后提交。我知道这是一个七年前的帖子,所以从那以后可能发生了很多变化,但也许没有?

它应该在更改集之后提交。在大多数数据库上,addColumn 也会自动提交。

ChangeSet 标签的文档可以解释为“在变更日志中的所有先决条件成功后提交”,这与 7 年前的帖子相矛盾。

Liquibase 尝试执行最后提交的事务中的每个变更集,如果出现错误则回滚。某些数据库会自动提交语句,这会干扰此事务设置并可能导致意外的数据库状态。因此,通常最好每个变更集只有一个更改,除非您希望将一组非自动提交的更改应用为事务(例如插入数据)。

Liquibase 是否仍然意味着在每个变更集之后提交?

我将 Liquibase 3.5.3 与 Netbeans/Maven 结合使用,并使用 Java 代码启动更新。

我有一个 main_changelog 文件,其唯一目的是包含目录中的所有变更日志。该目录中的两个(目前)变更日志各有两个变更集。这两个变更日志在其变更集之外都有一个 onFail="HALT" 前提条件。

我的测试环境的前提条件是changelog_1成功(因此其中的所有变更集都将被执行),而changelog_2前提条件失败。

我看到的是,在这个全新的数据库上,DATABASECHANGELOG 表已创建,但为空。没有提交任何变更集,可能是因为稍后的前提条件因失败而停止。我期望提交 HALT 之前的所有变更集。

按预期工作吗?还是错误?

Vit*_*huk 7

正如文档中提到的,每个变更集都有一个单独的事务

Liquibase 尝试执行事务中的每个变更集...

https://docs.liquibase.com/concepts/basic/changeset.html