【问题标题】:Modify SQL changeset修改 SQL 变更集
【发布时间】:2016-08-01 12:22:03
【问题描述】:

Liquibase 提供了一个<validCheckSum> 标记,以便在我们想要modify an existing changeset 时指定一个新的校验和。

但是,此标记不是SQL-formatted changesets 的有效属性。有runOnChange,但不一样。

有什么方法可以实现吗?

基本上,我在变更集上犯了一个错误,我什至无法添加回滚命令,因为 liquibase 检测到校验和更改并吐出错误,所以我被卡住了。

编辑

我要更改的具体变更集是:

--liquibase formatted sql

--changeset myname:0
ALTER TABLE `customers`
CHANGE COLUMN `name` `firstName` VARCHAR(45) NULL;

--changeset myname:1
ALTER TABLE `customers`
ADD COLUMN `lastName` VARCHAR(45) NULL AFTER `firstName`;

我把它保存在一个文件changelog_1.05.sql 中。最后,我将该文件包含在我的changelog.xml 中:

<include file="changelog_1.05.sql" relativeToChangelogFile="true"/>

&lt;validCheckSum&gt;不能加,因为是SQL格式的文件,所以不能加xml标签。

【问题讨论】:

    标签: liquibase rollback changeset


    【解决方案1】:

    尽管没有记录,但从源代码来看,validCheckSum 似乎是格式化的 sql 更改日志中的有效属性。你可以看到line 89 in FormattedSqlChangelogParser.java 有代码来寻找这个属性。

    【讨论】:

    • 哇,太好了。不幸的是,它是在不到一个月前添加的,尚未发布。
    • 我认为 Liquibase 3.5.0 版计划在 2016 年 4 月底发布。
    • 很高兴听到。再次感谢
    【解决方案2】:

    我最终在这里尝试在 Liquibase 3.9.0 中将 validCheckSum 与 SQL 文件一起使用。 它有效,但仅当“--validCheckSum”位于没有其他属性的新行中时(与“--runAlways”等其他属性相反: --changeset me:test --runAlways:true --splitStatements:false --validCheckSum: 1:any

    这似乎是由于用于解析属性的正则表达式: https://github.com/liquibase/liquibase/blob/17fcfe4f8dae96ddb4caa6793051e47ce64ad933/liquibase-core/src/main/java/liquibase/parser/core/formattedsql/FormattedSqlChangeLogParser.java#L87

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-12
      • 1970-01-01
      相关资源
      最近更新 更多