我有一个简单的liquibase变更集(下面),我正在尝试测试它。
这是应用程序启动后运行的第二个更改日志。
我故意编写了一个错误代码,其中我尝试创建列“new_2”两次,以强制回滚变更集中的所有条目:ADD_COL_2
然而,即使生成了回滚文件,并且我看到:
信息4/13/16 12:17 AM:LiquiBase:classpath:db/changelog/db.changelog-multi-set-then-rollback.xml:classpath:db/changelog/db.changelog-multi-set-then-rollback.xml::add_col_2::user1:回滚changeset:classpath:db/changelog/db.changelog-multi-set-then-rollback.xml::add_col_2::user1:回滚changeset:classpath:db/changelog/db.changelog-multi-set-then-rollback.xml::add_col_2::user1
信息4/13/16 12:17 AM:LiquiBase:classpath:db/changelog/db.changelog-multi-set-then-rollback.xml:classpath:db/changelog/db.changelog-multi-set-then-rollback.xml::add_col_1::user1:回滚changeset:classpath:db/changelog/db.changelog-multi-set-then-rollback.xml::add_col_1::user1:回滚changeset:classpath:db/changelog/db.changelog-multi-set-then-rollback.xml::add_col_1::user1
在日志中,仅回滚NEW_4&NEW_5列create。
ADD_COL_2更改日志不出现在DatabaseChangelog中。
ADD_COL_1 changelog在databasechangelog中执行apppear。
我真的在这里一筹莫展,我想我已经跑了所有可能的组合…我希望我在做傻事!
任何帮助都是无限感激的!!
我正在使用Spring版本4.1.7、LiquiBase3.4.2并在JUnit中运行测试。
<changeSet id="ADD_COL_1" author="USER1" failOnError="true">
<comment>Add column NEW_1 to TABLE_1</comment>
<tagDatabase tag="ADD_COL_1"/>
<addColumn tableName="TABLE_1">
<column name="NEW_1" type="varchar(10)" value="NEW_1"/>
</addColumn>
</changeSet>
<changeSet id="ADD_COL_2" author="USER1" failOnError="true">
<tagDatabase tag="ADD_COL_2"/>
<comment>Add column NEW_2 to TABLE_1</comment>
<addColumn tableName="TABLE_1">
<column name="NEW_2" type="varchar(10)" value="NEW_2"/>
</addColumn>
<comment>Add column NEW_3 to TABLE_1</comment>
<addColumn tableName="TABLE_1">
<column name="NEW_2" type="varchar(10)" value="NEW_3"/>
</addColumn>
<comment>Add column NEW_4 to TABLE_1</comment>
<addColumn tableName="TABLE_1">
<column name="NEW_4" type="varchar(10)"/>
</addColumn>
<comment>Add column NEW_5 to TABLE_1</comment>
<addColumn tableName="TABLE_1">
<column name="NEW_5" type="varchar(10)"/>
</addColumn>
<rollback>
<dropColumn tableName="TABLE_1" columnName="NEW_2"/>
<dropColumn tableName="TABLE_1" columnName="NEW_3"/>
<dropColumn tableName="TABLE_1" columnName="NEW_4"/>
<dropColumn tableName="TABLE_1" columnName="NEW_5"/>
</rollback>
</changeSet>
Liquibase不会运行任何
部分,直到您要求它运行(使用Liquibase命令)。它执行事务中的每个变更集,如果失败,它会尝试使用数据库事务引擎回滚这个事务(这有一些限制,例如,如果在MySQL中添加列a,而在它失败后在同一事务中添加列B,则不会回滚a,因为MySQL确实在DDL语句之后提交)。
我的问题是liquibase没有回滚我的一些变更集,这些变更集是在我试图回滚的变更集上设置标签后执行的。 例如,我创建了两个按正常方式执行的变更集(A和B)。然后,我创建了另一个变更集,它将变更集B的标记设置为Release1。并且这个变更集也按预期工作。但是,我随后执行另外5个变更集,所有变更集都使用回滚命令。而且这些也执行得很好。 现在,这个回滚不应该回滚在执行release1标记之后执行的任
这方面有什么最佳做法吗?我们不能在LiquiBase中手动设置事务吗?
我使用LiquiBase3.4.1和MySQL56并通过spring boot运行Liquibase。 我有一个变更集,其中包括向现有表中添加一列。新的具有属性,并带有一个简单的select。 当我在该选择中出错时,变更集失败,迁移在该变更集停止。然而,新列被提交到数据库,但没有正确的值,而且,最糟糕的是,这个变更集没有标记为run!下一次运行迁移时,Liquibase再次尝试执行变更集,但失败了
case-0-3.sql: 我在进行任何更改之前标记数据库: 之后,我在每个文件应用后应用文件和标记数据库: 求求你,救命。可能有人在sql或其他格式中使用回滚操作?哪里错了?我做错了什么?它是工作液基功能吗?
我正在处理一个分支,例如需要删除表X中的一列,我添加了一个更改,它对该特定分支有好处,然后我切换到另一个分支,该分支仍然需要该列,并且该更改需要回滚。db在不同的分支之间有很多变化,比如这样的变化。 我为每个分支添加一个新的changelog xml,并将其包含在主changelog xml中。显然,当我切换到另一个分支时,前一个分支的changlog xml不再在工作区中,并且liquibase