【问题标题】:Liquibase YAML - PreconditionsLiquibase YAML - 前提条件
【发布时间】:2021-10-08 08:26:09
【问题描述】:

我正在尝试check if a table exists,然后执行变更集。但似乎precondition 没有正确执行。关于如何检查表是否存在并执行语句的任何建议?

Liquibase 脚本:

databaseChangeLog:
- preConditions:
  - onFail: MARK_RAN
  - sqlCheck:
      expectedResult: 1
      sql: SELECT count(*) FROM information_schema.TABLES WHERE TABLE_NAME = TABLE_MAY_NOT_EXIST
- changeSet:
    id: 1001001
    author: upgrade_author
    changes:
    - sql:
        sql: UPDATE MY_TABLE SET COL_A = (SELECT TOP 1 COL_A FROM TABLE_MAY_NOT_EXIST ORDER BY COL_A DESC)
        stripComments:  true

错误日志:

Caused by: liquibase.exception.DatabaseException: Table "TABLE_MAY_NOT_EXIST" not found; SQL statement:
UPDATE MY_TABLE SET COL_A = (SELECT TOP 1 COL_A FROM TABLE_MAY_NOT_EXIST ORDER BY COL_A DESC) [42102-197] [Failed SQL: UPDATE MY_TABLE SET COL_A = (SELECT TOP 1 COL_A FROM TABLE_MAY_NOT_EXIST ORDER BY COL_A DESC)]
    at liquibase.executor.jvm.JdbcExecutor$ExecuteStatementCallback.doInStatement(JdbcExecutor.java:356) ~[liquibase-core-3.6.3.jar:na]
    at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:57) ~[liquibase-core-3.6.3.jar:na]
    at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:125) ~[liquibase-core-3.6.3.jar:na]
    at liquibase.database.AbstractJdbcDatabase.execute(AbstractJdbcDatabase.java:1229) ~[liquibase-core-3.6.3.jar:na]
    at liquibase.database.AbstractJdbcDatabase.executeStatements(AbstractJdbcDatabase.java:1211) ~[liquibase-core-3.6.3.jar:na]
    at liquibase.changelog.ChangeSet.execute(ChangeSet.java:600) ~[liquibase-core-3.6.3.jar:na]

【问题讨论】:

    标签: sql spring-boot liquibase spring-boot-test


    【解决方案1】:

    我看到你错过了liquibase的属性文件,你可以找到写liquibase属性文件的方法here

    此外,可以按照here 的说明创建更改日志文件

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-02
      • 1970-01-01
      • 2015-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多