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

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

仲孙小云
2023-03-14

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

>

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

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

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

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

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

  • 共有2个答案

    张献
    2023-03-14

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

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

    锺霍英
    2023-03-14

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

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

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

     类似资料:
    • 为了从我的数据库(oracle,db2)生成insert语句,我使用了带参数的liquibase generateChangeLog命令

    • 问题内容: 我在我的项目中有一个textarea,用户可以在其中保存SQL查询,但要求之一是检查此查询是否有效 例子 如果用户输入类似: 这应该返回false并显示一条错误消息,提示您不必给出任何原因 主要是查询将只是语句 注意, 我现在不想使用任何服务器端 问题 是否有人知道具有此功能或类似功能的javascript / jquery库或插件 我有谷歌这个,它没有显示任何东西 谢谢 问题答案:

    • 我有一个API通过apigateway服务,使用AWS_IAM身份验证。我希望使用lambda授权程序,这样我就可以实现自定义授权。我意识到我可以使用认知或自定义OAuth应用程序,并让我的客户发送相关的授权令牌。 但是,我当前的客户端已经发送了一个AWS v4签名(用于AWS_IAM实现),我可以使用它来识别用户并验证签名是否有效吗? 在授权程序lambda中收到的令牌如下所示:

    • 问题内容: 我正在评估JOOQ是否可在仍在开发中的新系统中使用。我想避免在与应用程序一起开发数据库时生成代码,而只是为该应用程序起持久存储的作用。因此,预计数据库模式定义将由Java代码(java中的表定义)驱动。 JOOQ是否适合上述用例?是否有用于模式定义的Java DSL? 问题答案: JOOQ是否适合上述用例? 是的,许多jOOQ用户仅使用运行时库,而没有代码生成器。入门指南中提供了示例。

    • 我正在评估JOOQ在一个仍在开发中的新系统中的使用情况。当数据库与应用程序一起开发时,我希望避免代码生成,而只是在这个应用程序中扮演持久存储的角色。因此,数据库模式定义应该由Java代码(Java中的表定义)驱动。 JOOQ是否适用于上述用例?是否有用于模式定义的JavaDSL?

    • 在C/C中,可以对SIMD(如AVX和AVX2)指令使用内部函数。有没有办法在Rust中使用SIMD?