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

使用带有changeSetId和changeSetAuthor的rollback标记时找不到Liquibase变更集

公西姚石
2023-03-14

我正在使用LiquiBase3.4.2(通过Maven插件)。我有一个db.changelog-master.xml文件,其中包含另外两个文件:db.changelog-2.6.xml和db.changelog-2.10。

db.changelog-master.xml看起来如下所示:

<?xml version="1.0" encoding="UTF-8"?> 
<databaseChangeLog logicalFilePath="/database-migration/db.changelog-master.xml"
               xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd">
    <include file="versions/db.changelog-2.6.xml" relativeToChangelogFile="true"/>
    <include file="versions/db.changelog-2.10.xml" relativeToChangelogFile="true"/>

</databaseChangeLog>

在db.changelog-2.10中,我创建了一个 来删除一些数据,在 标记中,我引用了创建相同数据的 。这两个 看起来如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<databaseChangeLog logicalFilePath="/database-migration/versions/db.changelog-2.10.xml"
               xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
               xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd">
    <changeSet id="1" author="my-user">
        <insert tableName="TABLE">
            <!-- SOME DATA -->
        </insert>
    </changeSet>

    <changeSet id="2" author="my-user">
        <delete tableName="TABLE" />
        <rollback changeSetId="1" changeSetAuthor="my-user" />
    </changeSet>
</databaseChangeLog>

问题是,当我尝试运行update命令时,出现以下错误消息:

是我做错了什么还是这是Liquibase的错误?

共有1个答案

向修谨
2023-03-14

请检查 中打开和关闭XML标记的匹配情况。在您的示例中,我看到了开头标记 和结尾标记。可能您的问题是由于输入数据不正确造成的。非常奇怪的是,liquibase中的XML-parser没有检测到这一点。

尝试将结束标记替换为更合适的

 类似资料:
  • 我想在changelog文件中使用以下变更集标记数据库,以便将来回滚。当我应用这个变更集时,我在databasechangelog中注意到,前面的变更集也用标记更新了。 changelog文件中的变更集 下面是从databasechangelog表中提取的内容,function51是上一次运行的变更集 有人遇到过吗?我使用的是Liquibase 3.1.1 多谢了。

  • LiquiBase:CVC-complex-type.2.4.A:发现以元素'sql'开始的无效内容。应使用“{”http://www.liquibase.org/xml/ns/dbchangelog“:modifysql}”之一。 获取此变更集的错误

  • 我已经用Spring试用过LiquiBase3.0测试版了(顺便说一句,它不适合2.0)。很顺利。 现在,我正在用Ant和相同的数据库和changelog测试它,在回滚所有更改并删除表DATABASECHANGELOG和DatabaseChangeloglock之后。 问题是liquibase将所有更改集记录在表DATABASECHANGELOG中,这意味着我的配置中没有任何错误,但它没有将更改提

  • 版本1.0.0 我有一个包含创建表的脚本r-1.0.0.sql和一个创建存储过程的脚本proc.sql。proc变更集被标记为runonchange=true。 我对这些变更很满意,并且我用标记1.0.0标记数据库 最后DATABASECHANGELOG表显示: 1-r-1.0.0.sql-executed 2-proc.sql-executed-(tag)1.1.0 版本2.0.0 我有一个重命

  • 我使用Thymeleaf作为模板引擎,通常输出如下可变值: 在Java I集合中: 并在html模板中输出: 这很好,但我想输出一个变量,而不需要标记。以下内容将非常好: 不幸的是,它不起作用。我的目标是避免不必要的标签输出变量值。这可能与Thymeleaf有关吗?