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

没有创建与LiquiBase.Change.core.RawSQLChange相反的内容

宋成天
2023-03-14
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>

这产生了下面的堆栈跟踪

[ERROR]未能在项目上执行目标org.liquiBase:liquiBase-maven-plugin:3.4.1:rollback(default-cli)generic:错误设置或运行liquiBase:liquiBase.exception.rollbackimpossibleException:没有与liquiBase.change.core.rawsqlchange created创建的反向关系->[Help 1]org.apache.maven.lifecycle.lifecycleExecutionException:未能在项目上执行目标org.liquiBase:liquiBase:.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.mojoExecutor.java:145)在er.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)在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(原生方法)在.java:497)在org.codehaus.plexus.classworlds.launcher.launcherenhanced(launcher.java:289)在org.codehaus.plexus.classworls.launcher.launcher.launcher.launcher.launcher.launcher.launcher.mainwithexitcode(launcher.java:229)在org.codehaus.plexus.classworls.launcher.launcher.main(launcher.java.356)在org.codehaus.plexus.classworls.launcher.launcher.main(launcher.java.356)由::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.exception.rollBackImpossibleException:lbackvisitor.visit(rollbackvisitor.java:39)在liquiBase.changelog.changelogiterator.run(changelogiterator.java:73)在liquiBase.liquiBase.rollback(liquiBase.java:656)在org.liquiBase.maven.plugins.liquiBase.java:656)在org.liquiBase.maven.plugins.liquiBase.java.(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更多[ERROR][ERROR][ERROR]有关错误和可能的解决方案的详细信息,请阅读apache.org/confluence/display/maven/mojoExecutionException

共有1个答案

黄信厚
2023-03-14

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

这里的文档http://www.liquibase.org/documentation/changes/SQL.html是SQL标记。以下是对回滚的一般描述:http://www.liquibase.org/documentation/Rollback.html

特别注意这一段:

其他重构如“拖放表”和“插入数据”没有相应的可自动生成的回滚命令。在这些情况下,以及希望重写默认生成的回滚命令的情况下,可以通过变更集标记中的标记指定回滚命令。如果不希望在回滚模式下执行任何操作来撤消更改,请使用空标记。

下面的示例显示了一个原始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>
 类似资料:
  • 我想创建反应应用程序,但我的npx创建反应应用程序myapp命令不工作D:\AED 在D:\AED\aed中创建新的React应用。 安装包。这可能需要几分钟。使用cra模板安装反应、反应-多姆和反应-脚本... 它被困在这里已经两个小时了。

  • 我知道在摇摆中,您可以使用父窗口打开子窗口/对话框/框架,并且子窗口将具有与父窗口相同的属性,例如共享左上角的徽章。JavaFX 8中是否有任何类似的功能?这会创建一个新窗口,但没有任何共享信息的父窗口(甚至可以关闭父窗口,而子窗口不会关闭): 注意:我已经阅读了JavaFX2.0FXML子窗口和JavaFXOpenNewWindow。

  • 我一直在尝试使用springboot和flyway创建一个web应用程序。构建工具是Gradle。然而,当我尝试运行程序时,Flyway只创建了一个名为Flyway_schema_hystory的表,但不从SQL脚本创建表。脚本<code>V1__Create_all_tables。sql位于正确的包中。<code>构建中的依赖项。添加了gradle</code>,在<code>应用程序中添加了f

  • 问题内容: 我该怎么做: 问题答案: 如果找到匹配项,则返回匹配的索引;如果找不到,则返回0。由于0为FALSE,因此您可以使用

  • 问题内容: 我正在寻找一个postgresql函数,它将与的相反。 我有一个电影表,其中的tag列包含诸如 我想从此列中获得不同的标签列表,例如 问题答案: 您可以使用和:

  • 问题内容: 在一个Java程序中,我使用 然后由于某种原因我写 pDir为空。我真的很想写 但这会引发空指针异常。 问题答案: 您需要一个带有路径的文件,尝试使用getAbsoluteFile。