Liquibase:columnName 是必需的

Liquibase: columnName is required

尝试使用 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 有什么问题吗?

您的 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