没有创建与 liquibase.change.core.RawSQLChange 相反的内容

2024-01-19

问题在于: 当运行maven命令时,似乎问题出现在https://liquibase.jira.com/browse/CORE-465 https://liquibase.jira.com/browse/CORE-465,但是2009年,可以标记为“无法复制”,我使用一个文件.xml类型的liquibase和一个changeSet,但是许多createTable,addPrimaryKey,回滚,addForeignKeyConstraint,这个文件总是创建表和各自的约束,但是我我做了一个回滚,这个错误发生了,我厌倦了寻找互联网,然后找不到问题的解决方案,你能解决这个问题吗?与社区分享!

Maven 的插件和命令使用如下:

liquibase:rollback -Dliquibase.rollbackTag=payScript -PproductionPostgreSql

插件在这

<plugin>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-maven-plugin</artifactId>
    <version>3.4.1</version>
    <configuration>
        <changeLogFile>${basedir}/src/main/resources/changelogs/db.changelog-master.xml</changeLogFile>
        <driver>${driver}</driver>
        <url> ${host.db}</url>
        <username>${user.db}</username>
        <password>${password.db}</password>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>org.liquibase</groupId>
            <artifactId>liquibase-core</artifactId>
            <version>3.4.1</version>
        </dependency>
    </dependencies>
</plugin>

这产生了下面的堆栈跟踪

[错误] 无法在项目通用上执行目标 org.liquibase:liquibase-maven-plugin:3.4.1:rollback (default-cli):设置或运行 Liquibase 时出错:liquibase.exception.RollbackImpossibleException:与 liquibase.change 没有相反.core.RawSQLChange 创建 -> [帮助 1] org.apache.maven.lifecycle.LifecycleExecutionException:无法执行目标org.liquibase:liquibase-maven-plugin:3.4.1:项目上的回滚(default-cli)通用:设置或运行Liquibase时出错:liquibase.exception.RollbackImpossibleException :没有创建与 liquibase.change.core.RawSQLChange 相反的内容 在 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:216) 在 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) 在 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) 在 org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116) 在 org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80) 在 org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51) 在 org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128) 在 org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307) 在 org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193) 在 org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106) 在 org.apache.maven.cli.MavenCli.execute(MavenCli.java:862) 在 org.apache.maven.cli.MavenCli.doMain(MavenCli.java:286) 在 org.apache.maven.cli.MavenCli.main(MavenCli.java:197) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:497) 在 org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289) 在 org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229) 在 org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415) 在 org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356) 导致:org.apache.maven.plugin.MojoExecutionException:设置或运行 Liquibase 时出错:liquibase.exception.RollbackImpossibleException:未创建与 liquibase.change.core.RawSQLChange 相反的异常 在 org.liquibase.maven.plugins.AbstractLiquibaseMojo.execute(AbstractLiquibaseMojo.java:398) 在org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134) 在 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208) ... 20 更多 引起原因:liquibase.exception.RollbackFailedException:liquibase.exception.RollbackImpossibleException:未创建与 liquibase.change.core.RawSQLChange 相反的内容 在 liquibase.changelog.ChangeSet.rollback(ChangeSet.java:648) 在 liquibase.changelog.visitor.RollbackVisitor.visit(RollbackVisitor.java:39) 在 liquibase.changelog.ChangeLogIterator.run(ChangeLogIterator.java:73) 在 liquibase.Liquibase.rollback(Liquibase.java:656) 在org.liquibase.maven.plugins.LiquibaseRollback.performLiquibaseTask(LiquibaseRollback.java:121) 在 org.liquibase.maven.plugins.AbstractLiquibaseMojo.execute(AbstractLiquibaseMojo.java:394) ... 22 更多 引起原因:liquibase.exception.RollbackImpossibleException:未创建与 liquibase.change.core.RawSQLChange 相反的内容 在 liquibase.change.AbstractChange.generateRollbackStatementsFromInverse(AbstractChange.java:424) 在 liquibase.change.AbstractChange.generateRollbackStatements(AbstractChange.java:397) 在liquibase.database.AbstractJdbcDatabase.executeRollbackStatements(AbstractJdbcDatabase.java:1269) 在 liquibase.changelog.ChangeSet.rollback(ChangeSet.java:634) ... 27 更多 [错误] [错误] [错误] 有关错误和可能的解决方案的更多信息,请阅读以下文章: [错误] [帮助 1]http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException


这是预期的行为。在您的变更日志中的某个位置,您有一个使用原始 SQL 的变更集。您没有将其包含在此处,但实际内容并不重要 - 只要它是原始 SQL,Liquibase 就无法确定如何“撤消”或回滚该更改。解决此问题的方法是查看该变更集并向该变更集添加一个回滚标记,以描述如何回滚所做的更改。

文档在这里http://www.liquibase.org/documentation/changes/sql.html http://www.liquibase.org/documentation/changes/sql.html用于 SQL 标签。回滚的一般描述如下:http://www.liquibase.org/documentation/rollback.html http://www.liquibase.org/documentation/rollback.html

特别注意这一段:

其他重构如“删除表”和“插入数据”没有 可以自动生成相应的回滚命令。 在这些情况下,以及您想要覆盖默认值的情况下 生成的回滚命令,您可以通过指定回滚命令 ChangeSet 标记内的标记。如果您不想做任何事情 撤消回滚模式中的更改,使用空标记。

下面的示例显示了原始 SQL 变更集和相应的回滚标记。

<changeSet author="liquibase-docs" id="sql-example">
    <sql dbms="h2, oracle"
            endDelimiter="\nGO"
            splitStatements="true"
            stripComments="true">insert into person (name) values ('Bob')
        <comment>What about Bob?</comment>
    </sql>
    <rollback>
        delete from person where name='Bob';
    </rollback>
</changeSet>

请注意,这是一个VERY天真的例子 - 你可能不想在真实场景中使用它,因为在你运行之后有可能liquibase update要部署此更改,任何使用数据库的程序都可能会将名为“Bob”的行插入到 person 表中,并且此回滚语句将删除名为“Bob”的所有行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

没有创建与 liquibase.change.core.RawSQLChange 相反的内容 的相关文章

随机推荐