提问者:小点点

liquibase是否可以在语法上验证使用updateSql命令生成的SQL?


在Liquibase中运行updateSQL命令行时,我发现了两个问题

>

  • 当通过sqlplus命令行运行sql时,Liquibase updateSQL输出中的最后一条语句即Insert into DBCHANGELOG表不会自动提交

    因此,尽管执行了变更集,但DBCHANGELOG表没有insert语句来记录它。因此,当我再次运行updateSQL时,最后一个变更集再次创建在不正确的SQL输出中。

    Liquibase不验证/检查SQL中的语法错误。

    因此,即使变更集SQL失败,对该变更集的DBChangeLog表的插入也会成功,这是不正确的。如果变更集SQL实际失败,是否有方法停止/失败变更集后面的insert语句?

    非常感谢任何帮助...我们离实现Liquibase已经很近了...!!


  • 共2个答案

    匿名用户

    我还发现Liquibase的最佳实践不是使用SQL脚本,而是手动编写用于更改的Liquibase XML文件。

    我试过使用ExecuteCommand标记午餐sqlplus或sqlcmd(我知道我的目标数据库),但它有一个bug,现在它被关闭了?!(但这是开源的,所以我不能抱怨:))

    说到这里,我发现使用XML来指定更改会带来许多其他挑战,例如:1。确保每个更改都包含在changelog xml文件中。我听说过很多组织忘记将文件添加到变更日志中。2.确保特定更改的文件始终与基于文件的版本控制同步。想象一下如果不这样会发生什么--这发生在我的许多客户身上...3.在不同环境(分支、UAT-关键修复、沙箱等)之间合并变更日志所浪费的时间...)

    匿名用户

    要回答主题行中的问题,请选择“否”,Liquibase无法验证SQL。Liquibase支持许多不同的数据库,每个数据库都有不同的SQL语法。

    如果可以,请停止使用updateSQL生成的SQL来实际执行更新,而使用Liquibase本身来执行更新。这样Liquibase就能检测到错误,并且表现得更好。我建议,如果DBA害怕Liquibase接触数据库,团队使用generateSQL作为检查Liquibase将做什么的预检查,但让Liquibase做它的工作。