liquibase rollback总是回滚到干净的空数据库

时间:2016-11-17 17:04:31

标签: mysql version liquibase rollback

我一直在努力学习Liquibase,现在尝试进行简单的回滚。但是当它执行时,它总是回滚到一个新的数据库,即使我只是尝试回滚到特定的标签。我的命令行在......

之下

java -jar liquibase.jar --changeLogFile = / media / GALACTUS / Documents / CHANGELOGS / CH_Q_10.xml rollback" 1.0.0-RELEASE"

我使用的更改日志也会粘贴在下面。我希望这最终会转到版本1.0.0数据库,但它只是完全回滚整个事情。我已经确认版本标记在更改日志中,所以我不确定我错过了什么。

<databaseChangeLog

        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.0.xsd
        http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">


    <changeSet id="1" author="root">
        <preConditions onFail="MARK_RAN">
            <tableExists tableName="student" schemaName="public"/>
        </preConditions>
        <createTable tableName="student">
            <column name="id" type="int">
                <constraints primaryKey="true" nullable="false"/>
            </column>
            <column name="name" type="varchar(50)">
                <constraints nullable="false"/>
            </column>
            <column name="enrolled" type="boolean" defaultValueBoolean="false"/>
        </createTable>
    </changeSet>

    <changeSet id="2" author="root">
        <preConditions onFail="MARK_RAN">
            <columnExists tableName="student" columnName="grade" schemaName="public"/>
        </preConditions>
        <addColumn tableName="student">
            <column name="grade" type="DECIMAL(4,2)" />
        </addColumn>
    </changeSet>

    <changeSet id="3" author="root">
        <preConditions onFail="MARK_RAN">
            <columnExists tableName="student" columnName="enrolled" schemaName="public"/>
        </preConditions>
        <dropColumn 
            columnName="enrolled"
            tableName="student"/>
            <rollback>ALTER TABLE student ADD COLUMN enrolled boolean;</rollback>
    </changeSet>

    <changeSet id="4" author="root" >
        <tagDatabase tag="1.0.0-RELEASE"/>
    </changeSet>

    <changeSet id="5" author="root">
        <createTable tableName="instructor">
            <column name="id" type="int">
                <constraints primaryKey="true" nullable="false"/>
            </column>
            <column name="name" type="varchar(50)">
                <constraints nullable="false"/>
            </column>
            <column name="start_date" type="varchar(50)" />
        </createTable>
    </changeSet>

    <changeSet id="6" author="root" >
        <tagDatabase tag="1.1.0-RELEASE"/>
    </changeSet>

</databaseChangeLog>

下面是我的更改日志的镜头,显示了版本标记,但它从不回滚到该标记,它只是继续回滚所有内容。

Version tags in Changelog

我非常感谢任何想法或想法,从我所读过的所有内容看来,这应该是相当直接的,我有点困惑。

1 个答案:

答案 0 :(得分:0)

我猜想Liquibase开始回滚并继续直到找到指定的标签。因此,我将检查是否有没有看到匹配标签的原因,例如标签中的键入错误。我注意到命令中在“ 1.0.0-”和“ RELEASE”之间有一个空格,并且该空格不在更改日志的标签中。