使用yaml格式的liquibase插入行

sti*_*vlo 9 java yaml liquibase

我试图定义一个changeSet,使用liquibase在表中插入两行.为了做到这一点,我写了以下changeSet:

- changeSet:
  id: 1.0/7
  author: stivlo
  changes:
    -insert:
        tableName: my_table
        columns:
        - column:
            name: id
            value: "1"
        - column:
            name: name
            value: "One"
    -insert:
        tableName: my_table
        columns:
        - column:
            name: id
            value: "2"
        - column:
            name: name
            value: "Two"
Run Code Online (Sandbox Code Playgroud)

当我启动Spring Boot应用程序时,会执行更改集,但不会插入行.

在DATABASECHANGELOG表中,我找到了一个原始的说法,即迁移已执行,但描述为"空",表示liquibase无法看到迁移中的任何更改.

如何修复我的yaml以便能够插入这两行?


PS我设法解决了嵌入SQL语句而不是使用liquibase插入的问题.

- changeSet:
  id: 1.0/7
  author: stivlo
  changes:
    - sql:
        sql: insert into my_table (id, name) values (1, "One")
    - sql:
        sql: insert into my_table (id, name) values (2, "Two")
Run Code Online (Sandbox Code Playgroud)

这有效,但我仍然有兴趣知道如何正确定义liquibase插入.谢谢.

Qua*_*137 5

我一直在同一个问题上挣扎,我想分享一些想法。
首先,关于您的特定问题-我认为您的.yml格式不正确,尽管它可能只是stackoverflow格式。它看起来应该像这样:

- changeSet:
    id: 1.0/7
    author: stivlo
    comment: "Some comments go here"
    changes:
     - insert:
         tableName: my_table
         columns:
         - column:
             name: id
             value: "1"
         - column:
             name: name
             value: "One"
     - insert:
         tableName: my_table
         columns:
         - column:
             name: id
             value: "2"
         - column:
             name: name
             value: "Two"
Run Code Online (Sandbox Code Playgroud)

请注意,整个变更集的内容都是从- changeSet块的开头缩进的。
所有-标记后都应加上空格,否则在某些情况下您什么都看不到或出错,
顺便说一句,我希望您不要忘记databaseChangeLog文件顶部的块吗?

有关解决liquibase问题的方法:

此职位的积分

首先,正如Mattias B提到的那样,有一个非常有用的“ updateSQL”选项。我使用CLI

  java -jar liquibase.jar --driver=org.h2.Driver --classpath=h2-1.3.170.jar --changeLogFile=yourchangelogpath/changelog.yaml --url=jdbc:h2:D:/Variaciok/db/variation --username=sa --password= updateSQL
Run Code Online (Sandbox Code Playgroud)

您可以将几乎所有选项移至file,例如

driver: org.h2.Driver
classpath: h2-1.3.170.jar
changeLogFile: yourchangelogpath/changelog.yaml
url: jdbc:h2:D:/db/variation
username: sa
password:
Run Code Online (Sandbox Code Playgroud)

所以你的命令看起来像

java -jar liquibase.jar --defaultsFile=our_database.properties updateSQL
Run Code Online (Sandbox Code Playgroud)

或者,如果您命名文件,liquibase.properties您甚至可以跳过--defaultsFile,所以它只是

java -jar liquibase.jar updateSQL
Run Code Online (Sandbox Code Playgroud)

其次,如果您在运行程序或CLI中均未看到任何错误,则几乎可以确定问题是.yml格式错误

希望能帮助到你!


小智 1

我知道这是一篇旧文章,但其他人可能会发现这很有用

我建议使用 liquibase“updateSQL”,以便通过显示生成的 SQL 来追踪问题。