【问题标题】:liquibase future rollback error with sqlFile tag: File not found带有 sqlFile 标记的 liquibase 未来回滚错误:找不到文件
【发布时间】:2011-01-15 06:24:19
【问题描述】:

我已将 future-rollback 标记添加到我的 ant 脚本中。我想要做的(我认为future-rollback 是我正在寻找的)是生成一个sql 回滚脚本,但不执行它(回滚脚本必须与sql 脚本一起交付 是来自的要求我的客户)。

我的变更日志文件有很多变更集,其中一些包含<sqlFile> 标记。

例如:

<databaseChangeLog ...>

<include file="latest/somesqlprocedure.xml" relativeToChangelogFile="true"/>

</databaseChangelog...>

latest/somesqlprocedure.xml 有一个sqlFile 标签。

<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog/1.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog/1.9 http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-1.9.xsd">

&lt;sqlFile path="${changelog.dir}/latest/myprocedure.sql" splitStatements="false" /&gt;

&lt;/changeSet&gt;

&lt;/databaseChangeLog&gt;

当我运行 ant 脚本时,出现以下错误

liquibase.exception.ChangeLogParseException: 迁移文件无效:<sqlfile path=${changelog.dir}/latest/myprocedure.sql> - 找不到文件

有人知道发生了什么吗?

这是 build.xml 文件的 sn-p

<target name="db-future-rollback" depends="init">
        <rollbackFutureDatabase
                    changeLogFile="${db.changelog.file}"
                    driver="${database.driver}"
                    url="${database.url}"
                    username="${database.username}"
                    password="${database.password}"
                    outputfile="${database.rollback.dir}"
                    promptOnNonLocalDatabase="${prompt.user.if.not.local.database}"
                    classpathref="project.classpath"
                    >
            </rollbackFutureDatabase>

    </target>

提前致谢。

【问题讨论】:

    标签: rollback liquibase


    【解决方案1】:

    问题可能来自在 sqlFile 中使用绝对路径,而不是类路径相对路径。类路径相对路径是 liquibase 最初支持的,并且经过更好的测试。最近添加了绝对路径选项,futureRollbackSql 代码可能没有打补丁支持。

    你可以尝试使用相对路径的 sqlFile 吗?

    附带说明,相对路径选项通常更好,因为在数据库更改日志表中使用文件名来记录哪些更改集已运行。如果您使用绝对路径,则存储整个路径,并且如果您尝试从不同的路径重新运行更改日志(或从不同的机器上针对相同的数据库运行),liquibase 会认为它是不同的更改集并尝试重新运行它。

    【讨论】:

    • 对我来说,路径没问题。它能够找到sql。但是,它不执行 sql 文件的任何语句。我在 sql 文件中有“创建表”命令。
    猜你喜欢
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    • 2016-11-19
    • 2015-11-12
    • 2016-09-23
    • 1970-01-01
    • 2021-09-11
    • 2017-12-31
    相关资源
    最近更新 更多