Liquibase не выполняет SQL на MySQL / MariaDB, но H2 в Spring Boot - PullRequest
0 голосов
/ 07 декабря 2018

Версии
Liquibase: 3.6.2
Spring Boot: 2.1.0.RELEASE
MySQL / MariaDB: mysql Ver 15.1 Distrib 10.1.25-MariaDB, для Win32 (AMD64)
H2: 1.4.197

Цель

У меня есть скрипт миграции, который преобразует данные из двух таблиц в одну.Сценарий написан на SQL и работает правильно (проверено выполнением вручную).Кроме того, при запуске миграций с базой данных H2 все работает нормально.

Проблема

Когда я переключаюсь на MySQL / MariaDB, данные не вставляются, как определено в сценарии.Однако в соответствии с таблицей базы данных exchangechange скрипт работает правильно:

004.transform_translatable_data     vetemi  classpath:db/changelogs/0004.transfrom_translatabl...   2018-12-07 16:26:14     68  EXECUTED    8:3dc05e2db0d93de8ce10de09612dd2c0  sqlFile         NULL    3.6.2   NULL    NULL    4196374083

При запуске приложения также не возникает ошибки (файл журнала):

2018-12-07 16:26:14.880  INFO 13628 --- [           main] liquibase.changelog.ChangeSet            : ChangeSet classpath:db/changelogs/0004.transfrom_translatable_data.yaml::004.transform_translatable_data::vetemi ran successfully in 0ms

Обратите внимание на конец журналасообщение, время выполнения составляет 0 мс.Это подозрительно.

Выполнение той же настройки на H2 показывает время выполнения 16 мс:

2018-12-07 16:37:40.699  INFO 13648 --- [           main] liquibase.changelog.ChangeSet            : ChangeSet classpath:db/changelogs/0004.transfrom_translatable_data.yaml::004.transform_translatable_data::vetemi ran successfully in 16ms

Очевидно, что скрипт не запускался, хотя Spring и Liquibase не показывают никаких ошибок.

Скрипт миграции:

INSERT INTO `activity_translatables` (`id`, `name`, `description`, `modified`, `created`, `language_id`, `parent_id`)
        SELECT UUID(), activities.name, activities.description, activities.modified, activities.created, languages.id, activities.id
        FROM `activities`, `languages`
        WHERE languages.locale = 'de';

Журнал изменений в жидкой базе:

- changeSet:
    id: 004.transform_translatable_data
    author: vetemi
    changes:
    - sqlFile:
        dbms: h2, mysql
        encoding: utf8
        endDelimiter: \nGO
        path: ../data/004.transform_translatable.sql
        relativeToChangelogFile: true
        splitStatements: true
        stripComments: true

Я такжепробовал:

- changeSet:
id: 004.transform_translatable_data
        author: vetemi
        changes:
        - sql:
        comment: transfer all activities translatables into the new table with German as default
        dbms: mysql, h2
        splitStatements: true
        sql: insert into activities_translatables (id, name, modified, created, language_id, parent_id)
                    select UUID(), activities.description, activities.modified, activities.created, languages.id, activities.id
                    from activities, languages
                    where languages.locale = 'de'
        stripComments: true

Файл свойств:

spring.jpa.hibernate.ddl-auto=none
spring.datasource.url=jdbc:mysql://localhost:3306/db
spring.datasource.username=root
spring.datasource.password=
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.platform=mysql

Чего мне не хватает?Почему не работает?

...