2017-08-31 47 views
0

試圖使用Liquibase添加一列,然後卡住了。Liquibase:columnName是必填項

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 

當啓動應用程序開始遷移,出現以下錯誤occurres:

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文檔沒有說明任何標籤與屬性 「列名」 或「columnType 「這讓我更加困惑。

有誰知道如何解決這個問題或我的YAML有什麼問題?

+0

我從來沒有使用YAML,但:在[手冊中的示例](HTTP:// WWW。 liquibase.org/documentation/yaml_format.html)將'name:'相對於'column'縮進。 YAML對縮影敏感嗎? –

+0

@a_horse_with_no_name我使用各種YAML解析器進行了檢查。縮進似乎是正確的。 (例如:[yaml-online-parser.appspot.com](http://yaml-online-parser.appspot.com),複製上面的YAML並看到JSON輸出) –

回答

0

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

一位同事今天也指出了這一點。謝謝您的回答。 –