【发布时间】:2016-05-29 11:07:57
【问题描述】:
我正在尝试 Liquibase,以尝试自动化数据库部署并围绕数据库更改获得一些结构。
这是我想要评估自动回滚的变更集。现在,我试图在foreign key constraint 中引入一个错误,并期望rollback statements 在错误之后运行,并且它也会从customer 表中删除该列。
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd">
<preConditions>
<dbms type="mysql" />
</preConditions>
<changeSet id="002" author="Hrishi" failOnError="true"
runInTransaction="true">
<preConditions onError="HALT" onFail="HALT"
onFailMessage="The table gender doesnt exist. Precondition not met.">
<not>
<columnExists tableName="customer" columnName="gender_id" />
</not>
<and>
<not>
<foreignKeyConstraintExists foreignKeyName="fk_gender_customer"/>
</not>
</and>
</preConditions>
<addColumn tableName="customer" schemaName="sakila">
<column name="gender_id" type="smallint(1)" />
</addColumn>
<addForeignKeyConstraint constraintName="fk_gender_customer"
referencedTableName="gender" baseColumnNames="gender_id"
baseTableName="customer" referencedColumnNames="invoking_an_error" />
<rollback>
<dropColumn tableName="customer" columnName="gender_id" />
<dropForeignKeyConstraint baseTableName="customer"
constraintName="fk_gender_customer" />
</rollback>
</changeSet>
真正发生的是DATABASECHANGELOG 表中没有条目。这是我所期望的,但是customer 表中的列仍然存在。
我确实查看了关于 liquibase 文档的addColumn url 的帮助,并且支持 MySQL。
http://www.liquibase.org/documentation/changes/add_column.html
我的理解是否正确,它应该自动回滚变更集中的所有语句?
EDIT :我认为在这种特定情况下的问题是 ALTER 表是一个 DDL 语句。来自 MySQL cannot-roll-back 的文档。
【问题讨论】:
标签: mysql database maven-3 liquibase