2017-08-31 1 views
0

Vous essayez d'ajouter une colonne à l'aide de Liquibase et je suis bloqué.Liquibase: columnName est requis

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 

Lors du démarrage de l'application pour démarrer la migration, les occurres d'erreur suivant:

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 

La documentation Liquibase ne précise pas les balises avec les attributs "columnName" ou « columnType "qui me confond encore plus.

Est-ce que quelqu'un sait comment résoudre ce problème ou ce qui ne va pas avec mon YAML?

+0

Je ne l'ai jamais utilisé YAML, mais: Le [exemple dans le manuel] (http: // www. liquibase.org/documentation/yaml_format.html) indente le 'nom:' relatif à 'column'. YAML est-il sensible à l'indentation? –

+0

@a_horse_with_no_name Je l'ai vérifié en utilisant divers analyseurs YAML. L'Indention semble être correcte. (Exemple: [yaml-online-parser.appspot.com] (http://yaml-online-parser.appspot.com), copier au-dessus de YAML et voir la sortie JSON) –

Répondre

0

Votre YAML est valide, mais pas sémantiquement correct.

Cette pièce:

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

définit ce qui est une entrée dans une liste (-), l'élément de liste est une application car elle se compose de paires de valeurs clés. La première paire valeur/clé est column:. Comme les clés suivantes sont indentées de la même manière que column:, , elles sont traitées comme des paires valeur/clé suivantes. Ainsi, votre clé column: contient une valeur vide. Ce que vous voulez, c'est que la clé column: contienne toutes les autres valeurs en tant que mappage imbriqué. Pour cela, vous devez mettre en retrait les autres clés plus:

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

Dans le contexte:

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

Un collègue a également souligné cela aujourd'hui. Merci pour votre réponse. –