11

是否可以在 YAML 中使用前提条件除了此页面http://www.liquibase.org/documentation/yaml_format.html我没有找到任何来源

但我正在寻找相当于:

<changeSet id="addColumn-example">
  <preConditions onFail="MARK_RAN">
     <columnExists schemaName="earls" 
           tableName="category" columnName="display_name"/>
  </preConditions>
  <dropColumn columnName="display_name" schemaName="earls" tableName="category"/>
</changeSet>  

所以我的自然翻译将是:

changeSet:
  id: addColumn-example
  author: francis
  preConditions:
    - columnExist:
      schemaName: earls
      tableName: category
      columnName: display_name                    
  changes:
    - addColumn:
      columns:
        - column:
          name: display_name
          type: varchar(100)

但我错过了onFail ...

4

5 回答 5

25

这个主题的记录很差,但经过多次尝试......你可以写这样的东西:

databaseChangeLog:
  - changeSet:
      id: 1
      author: pazfernando
      preConditions:
        - onFail: MARK_RAN
        - tableExists:
            schemaName: sa
            tableName: PROVEEDORBIENSERVICIO
      changes:
        - renameTable:
            newTableName: PROVEEDORBIENSERVICIO
            oldTableName: PROVEEDORSERVICIO
            schemaName: sa

这是另一个示例sqlCheck

preConditions:
  - onFail: CONTINUE
  - onError: CONTINUE
  - sqlCheck:
      expectedResult: 0
      sql: select count(*) from oss_organization where Status is null
  - sqlCheck:
      expectedResult: 0
      sql: select count(*) from oss_organization where Type is null
于 2016-03-11T01:11:56.730 回答
5

以下似乎有效:

databaseChangeLog:
  - changeSet:
      id: 1
      author: mraible
      preConditions:
        onFail: MARK_RAN
        not:
          sequenceExists:
            schemaName: public
            sequenceName: hibernate_sequence
      changes:
      - createSequence:
          sequenceName: hibernate_sequence
于 2014-10-03T20:43:25.737 回答
2

sqlCheck 条件的语法:

databaseChangeLog:
- changeSet:
    id: changeSet-id
    author: myName
    preConditions:
      - onFail: MARK_RAN
      - sqlCheck:
          expectedResult: 1
          sql: "select count(*) from foo where some-condition"
    changes:
      - sql: "your sql script"
于 2018-09-25T14:07:16.777 回答
1

它可能不适用于 Liquibase 3.1.x,但应该适用于刚刚发布的 3.2.0 版本。您的示例 changeSet 应该是正确的。

于 2014-06-02T20:23:22.717 回答
0

DBMS 前提条件

databaseChangeLog:
  - changeSet:
      id: 1
      author: yourname
      dbms: oracle,h2
      changes:
        - sql: "your sql script"

如您所见,这不是一个真正的先决条件,但我发现它的工作方式类似:如果数据库类型不匹配,则忽略变更集。

于 2019-11-18T11:53:15.643 回答