gpt4 book ai didi

mysql - Liquibase 变更集的自动回滚

转载 作者:行者123 更新时间:2023-11-30 22:25:13 28 4
gpt4 key购买 nike

我正在试用 Liquibase 以尝试自动化数据库部署并获得一些围绕数据库更改的结构。

这是我想评估自动回滚的变更集。现在,我试图在 外键约束 中引入一个错误,并期望 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 .

最佳答案

我不确定您发出的命令,但 <rollback> 中列出的更改发生错误时,变更集的一部分不会自动发生。当发生错误时,liquibase 会尝试回滚数据库事务,但如果某些事情已经提交,您可能会进入不一致状态。 <rollback>标签在那里,以便您可以使用 liquibase rollback 命令手动回滚更改。

关于mysql - Liquibase 变更集的自动回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35461896/

28 4 0