Liquibase:Migrate.sql 不检查前提条件
Posted
技术标签:
【中文标题】Liquibase:Migrate.sql 不检查前提条件【英文标题】:Liquibase : Migrate.sql does not check precondtions 【发布时间】:2013-07-16 08:45:25 【问题描述】:我使用 liquibase 根据变更集生成 SQL 文件。但是当我使用 liquibase:updateSQL 时,它不会在生成 SQL 文件之前检查先决条件
我有一个前提条件是在创建表之前检查表是否存在。
在这种情况下,即使表存在,“仍然会生成创建表 SQL 语句”。
当我运行 liquibase:update 目标时,此前提条件已正确检查。
那么 liquibase 在生成 sql 文件时不检查前置条件吗?
谢谢。
【问题讨论】:
我建议对 liquibase 项目提出异议。我猜先决条件很难呈现为纯 SQL。例如,该表可能存在于您的数据库实例中,但可能在另一个数据库实例中丢失...当通过 liquibase 运行迁移时,它可以使用 java.lang.基于 SQL 的解决方案可能必须在 Oracle 上生成 PL/SQL,但在不支持存储过程的数据库上根本不起作用。有趣的问题。 【参考方案1】:您可能已经找到了答案,但以防万一这可能会有所帮助:
http://forum.liquibase.org/topic/unexpected-behaviour-of-preconditions-with-updatesql
前提条件的onSqlOutput="TEST" 属性听起来像您正在寻找的。
在生成 updateSQL 时,请注意您编写的先决条件或何时测试它们。依赖先前应用的补丁(可能尚未在您的实例中执行)的前提条件可能会导致错误。
希望对你有帮助
【讨论】:
【参考方案2】:可能有助于提供一些代码。尤其是您允许其他人评估是否存在问题的前提条件。
【讨论】:
以上是关于Liquibase:Migrate.sql 不检查前提条件的主要内容,如果未能解决你的问题,请参考以下文章
我不明白 liquibase diff 试图通过这些选择来确定啥?
如果运行 spring boot 并让 liquibase 自动执行迁移,则 Liquibase databasechangelog 表存储相对路径