与liquibase.change.core.RawSQLChange没有反转

Mar*_*ira 6 java database eclipse liquibase maven

问题在于:当播放命令maven时,似乎问题在https://liquibase.jira.com/browse/CORE-465中找到,但是在2009年,可以标记为"无法再现",我使用一个文件.xml类型liquibase有一个changeSet,但是很多createTable,addPrimaryKey,rollback,addForeignKeyConstraint,这个文件总是创建表和你各自的约束,但是我做了回滚这个错误发生了,我累了找到Internet,然后可以找不到问题的解决方案,你能解决这个问题吗?与社区分享!

插件和命令用于maven:

liquibase:rollback -Dliquibase.rollbackTag=payScript -PproductionPostgreSql
Run Code Online (Sandbox Code Playgroud)

这个插件

<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>
Run Code Online (Sandbox Code Playgroud)

这产生了下面的堆栈跟踪

[错误]无法执行目标org.liquibase:liquibase-maven-plugin:3.4.1:rollback(default-cli)on project generic:设置或运行Liquibase时出错:liquibase.exception.RollbackImpossibleException:与liquibase.change无反转.core.RawSQLChange created - > [Help 1] org.apache.maven.lifecycle.LifecycleExecutionException:无法执行目标org.liquibase:liquibase-maven-plugin:3.4.1:rollback(default-cli)on project generic:Error设置或运行Liquibase:liquibase.exception.RollbackImpossibleException:与在org.apache.maven的org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:216)创建的liquibase.change.core.RawSQLChange无反转.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.maven.DefaultMaven.doExecute(DefaultMaven.java:193)org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)atg.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)at 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.changelog.ChangeSet.rollback中创建的liquibase.change.core.RawSQLChange无反向(ChangeSet.java:648)位于liquibase.Linquibase.roll上的liquibase.changelog.ChangeLogIterator.run(ChangeLogIterator.java:73)中的liquibase.changelog.visitor.RollbackVisitor.visit(RollbackVisitor.java:39)(Liquibase.java: 656)在org.liquibase.maven.plugins.LiquibaseRollback.liquibase.exception.RollbackImpossibleException:performLiquibaseTask(LiquibaseRollback.java:121)在org.liquibase.maven.plugins.AbstractLiquibaseMojo.execute(AbstractLiquibaseMojo.java:394)... 22多个没有造成逆liquibase.change.core. RawSQLChange在liquibase.lbstract.AbstractChange.generateRollbackStatements(AbstractChange.java:397)的liquibase.change.AbstractChange.generateRollbackStatements(AbstractChange.java:397)的liquibase.AbstractJdbcDatabase.executeRollbackStatements(AbstractJdbcDatabase.java:1269)的liquibase.change.AbstractChange.generateRollbackStatementsFromInverse(AbstractChange.java:424)中创建. changelog.ChangeSet.rollback(ChangeSet.java:634)... 27 more [ERROR] [ERROR] [ERROR]有关错误和可能的解决方案的更多信息,请阅读以下文章:[错误] [帮助1]121)at org.liquibase.maven.plugins.AbstractLiquibaseMojo.execute(AbstractLiquibaseMojo.java:394)... 22更多引起:liquibase.exception.RollbackImpossibleException:与liquibase.change创建的liquibase.change.core.RawSQLChange无反转.lbstractChange.generateRollbackStatementsFromInverse(AbstractChange.java:424)liquibase.change.AbstractChange.generateRollbackStatements(AbstractChange.java:397)at liquibase.database.AbstractJdbcDatabase.executeRollbackStatements(AbstractJdbcDatabase.java:1269)liquibase.changelog.ChangeSet.rollback( ChangeSet.java:634)..27 more [ERROR] [ERROR] [ERROR]有关错误和可能的解决方案的更多信息,请阅读以下文章:[错误] [帮助1]121)at org.liquibase.maven.plugins.AbstractLiquibaseMojo.execute(AbstractLiquibaseMojo.java:394)... 22更多引起:liquibase.exception.RollbackImpossibleException:与liquibase.change创建的liquibase.change.core.RawSQLChange无反转.lbstractChange.generateRollbackStatementsFromInverse(AbstractChange.java:424)liquibase.change.AbstractChange.generateRollbackStatements(AbstractChange.java:397)at liquibase.database.AbstractJdbcDatabase.executeRollbackStatements(AbstractJdbcDatabase.java:1269)liquibase.changelog.ChangeSet.rollback( ChangeSet.java:634)..27 more [ERROR] [ERROR] [ERROR]有关错误和可能的解决方案的更多信息,请阅读以下文章:[错误] [帮助1]execute(AbstractLiquibaseMojo.java:394)... 22更多引起:liquibase.exception.RollbackImpossibleException:与Liquibase.change.AbstractChange.generateRollbackStatementsFromInverse(AbstractChange.java:424)在liquibase上创建的liquibase.change.core.RawSQLChange没有反转在liquibase.change.ChangeSet.rollback(ChangeSet.java:634)的liquibase.database.AbstractJdbcDatabase.executeRollbackStatements(AbstractJdbcDatabase.java:1269)的.change.AbstractChange.generateRollbackStatements(AbstractChange.java:397)... 27更多[错误] ] [ERROR] [ERROR]有关错误和可能的解决方案的更多信息,请阅读以下文章:[错误] [帮助1]liquibase.exception.RollbackImpossibleException:在liquibase没有逆liquibase.change.core.RawSQLChange在liquibase.change.AbstractChange.generateRollbackStatementsFromInverse(AbstractChange.java:424)创建执行(AbstractLiquibaseMojo.java:394)...... 22多所致在liquibase.change.ChangeSet.rollback(ChangeSet.java:634)的liquibase.database.AbstractJdbcDatabase.executeRollbackStatements(AbstractJdbcDatabase.java:1269)的.change.AbstractChange.generateRollbackStatements(AbstractChange.java:397)... 27更多[错误] ] [ERROR] [ERROR]有关错误和可能的解决方案的更多信息,请阅读以下文章:[错误] [帮助1]RawSQLChange在liquibase.lbstract.AbstractChange.generateRollbackStatements(AbstractChange.java:397)的liquibase.change.AbstractChange.generateRollbackStatements(AbstractChange.java:397)的liquibase.AbstractJdbcDatabase.executeRollbackStatements(AbstractJdbcDatabase.java:1269)的liquibase.change.AbstractChange.generateRollbackStatementsFromInverse(AbstractChange.java:424)中创建. changelog.ChangeSet.rollback(ChangeSet.java:634)... 27 more [ERROR] [ERROR] [ERROR]有关错误和可能的解决方案的更多信息,请阅读以下文章:[错误] [帮助1]RawSQLChange在liquibase.lbstract.AbstractChange.generateRollbackStatements(AbstractChange.java:397)的liquibase.change.AbstractChange.generateRollbackStatements(AbstractChange.java:397)的liquibase.AbstractJdbcDatabase.executeRollbackStatements(AbstractJdbcDatabase.java:1269)的liquibase.change.AbstractChange.generateRollbackStatementsFromInverse(AbstractChange.java:424)中创建. changelog.ChangeSet.rollback(ChangeSet.java:634)... 27 more [ERROR] [ERROR] [ERROR]有关错误和可能的解决方案的更多信息,请阅读以下文章:[错误] [帮助1]java:1269)at liquibase.changelog.ChangeSet.rollback(ChangeSet.java:634)... 27 more [ERROR] [ERROR] [ERROR]有关错误和可能的解决方案的更多信息,请阅读以下文章:[错误] [帮助1]java:1269)at liquibase.changelog.ChangeSet.rollback(ChangeSet.java:634)... 27 more [ERROR] [ERROR] [ERROR]有关错误和可能的解决方案的更多信息,请阅读以下文章:[错误] [帮助1]http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

Ste*_*nie 14

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

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

特别要注意这一段:

其他重构例如"drop table"和"insert data"没有相应的可以自动生成的回滚命令.在这些情况下,以及要覆盖默认生成的回滚命令的情况下,可以通过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>
Run Code Online (Sandbox Code Playgroud)

请注意,这是一个非常简单的示例 - 您可能不希望在真实场景中使用它,因为在您运行liquibase update部署此更改之后,使用数据库的任何程序可能会将行插入到人员表中名称'Bob',此回滚语句将删除所有名为'Bob'的行.