当前位置: 首页 > 知识库问答 >
问题:

liquibase回滚始终回滚到干净的空数据库

通建安
2023-03-14

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

java-jar liquiBase.jar--changelogfile=/media/galactus/documents/changelogs/ch_q_10.xml回滚“1.0.0-release”

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

<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>

共有1个答案

仉宪
2023-03-14

我猜Liquibase开始回滚并继续,直到找到指定的标签。因此,我会检查是否有原因导致它看不到匹配的标签,比如标签中的键入错误。我注意到在命令中,在“1.0.0-”和“release”之间有一个空格,而这个空格不在Changelog的标签中。

 类似资料:
  • case-0-3.sql: 我在进行任何更改之前标记数据库: 之后,我在每个文件应用后应用文件和标记数据库: 求求你,救命。可能有人在sql或其他格式中使用回滚操作?哪里错了?我做错了什么?它是工作液基功能吗?

  • 我的问题是liquibase没有回滚我的一些变更集,这些变更集是在我试图回滚的变更集上设置标签后执行的。 例如,我创建了两个按正常方式执行的变更集(A和B)。然后,我创建了另一个变更集,它将变更集B的标记设置为Release1。并且这个变更集也按预期工作。但是,我随后执行另外5个变更集,所有变更集都使用回滚命令。而且这些也执行得很好。 现在,这个回滚不应该回滚在执行release1标记之后执行的任

  • 我正在处理一个分支,例如需要删除表X中的一列,我添加了一个更改,它对该特定分支有好处,然后我切换到另一个分支,该分支仍然需要该列,并且该更改需要回滚。db在不同的分支之间有很多变化,比如这样的变化。 我为每个分支添加一个新的changelog xml,并将其包含在主changelog xml中。显然,当我切换到另一个分支时,前一个分支的changlog xml不再在工作区中,并且liquibase

  • case-0-3.sql: I在进行任何更改之前标记数据库: 之后,我应用文件,并在每个文件应用后标记数据库:

  • 当出现多个矿工挖到同一个区块时,系统会选择累计算力最大的区块。出现这种情况时,有可能需要回滚已经处理过的区块,并处理新区块。 当前处理区块时,都会根据区块哈希,创建一个操作历史记录。当需要回滚区块时,将遍历这个历史记录,用旧的数据覆盖当前数据,并删除该历史记录。从而简单的实现区块的回滚。

  • 我是一名实习生,我正在尝试学习Liquibase,看看我们是否可以将其用于我们的应用程序。我使用了Git Bash中的Liquibase,没有任何问题(在更新和回滚方面都很好),然后我尝试将Liquibase与Spring Boot项目一起使用,看看是否能够更新数据库。我做到了,我通过Spring Boot创建并更新了db。但接下来我想做一些回滚,但我不能,我不知道该做什么。我试着在Git Bas