Liquibase:columnName是必需的

时间:2017-08-31 12:30:34

标签: database yaml database-migration liquibase

尝试使用Liquibase添加一列,我被卡住了。

YAML:

databaseChangeLog:
- changeSet:
    id: add-status-1
    author: me
    failOnError: true
    changes:
    - addColumn:
        tableName: CODEENTRY
        columns:
        - column:
          name: STATUS
          type: char(3)
          value: USE
    rollback:
    - dropColumn:
        tableName: CODEENTRY
        columnName: STATUS

启动应用程序以开始迁移时,会出现以下错误:

columnName is required, classpath:db/changelog/initial/20-add-status.yaml::add-status-1::AXRGU02
columnType is required, classpath:db/changelog/initial/20-add-status.yaml::add-status-1::AXRGU02

Liquibase文档没有说明任何带有“columnName”或“columnType”属性的标签,这让我更加困惑。

有谁知道如何解决这个或我的YAML有什么问题?

1 个答案:

答案 0 :(得分:1)

您的YAML有效,但在语义上不正确。

这部分:

- column:
  name: STATUS
  type: char(3)
  value: USE

定义这是列表的条目(-),列表项是映射,因为它由键值对组成。第一个键值对是column:。由于以下键的缩进方式与column:相同,因此将它们视为后续键值对。因此,您的密钥column:包含空值。你想要的是键column:将所有其他值保存为嵌套映射。为此,您需要进一步缩进其他键:

- column:
    name: STATUS
    type: char(3)
    value: USE

在上下文中:

databaseChangeLog:
- changeSet:
    id: add-status-1
    author: me
    failOnError: true
    changes:
    - addColumn:
        tableName: CODEENTRY
        columns:
        - column:
            name: STATUS
            type: char(3)
            value: USE
    rollback:
    - dropColumn:
        tableName: CODEENTRY
        columnName: STATUS