Как решить SchemaVersionTrackingException в dbdeploy из-за отсутствия значения по умолчанию в delta_set?

Я пытаюсь сделать автоматическую миграцию БД. Я использую dbdeploy для того же. Я следовал инструкциям в этой ссылке http://blog.codeborne.com/2012/09/using-dbdeploy-in-gradle.html

Я создал таблицу журнала изменений как:

CREATE TABLE changelog (
  change_number INTEGER NOT NULL,
  delta_set VARCHAR(10) NOT NULL,
  start_dt TIMESTAMP NOT NULL,
  complete_dt TIMESTAMP NULL,
  applied_by VARCHAR(100) NOT NULL,
  description VARCHAR(500) NOT NULL
);

ALTER TABLE changelog ADD CONSTRAINT Pkchangelog PRIMARY KEY (change_number, delta_set);

Задача updateDatabase в build.gradle:

task updateDatabase << {
    ant.dbdeploy(driver: dbDriver,
            url: dbUrl,
            userid: dbUsername,
            password: dbPassword,
            dir: './src/main/resources/deploy/sql',
            dbms: 'mysql'

    )
}

Когда я выполняю gradle updateDatabase, я получаю com.dbdeploy.exceptions.SchemaVersionTrackingException: не удалось обновить журнал изменений, потому что: Поле 'delta_set' не имеет значения по умолчанию.

Я попытался присвоить 'main' в качестве значения по умолчанию в файле журнала таблицы изменений следующим образом:

delta_set VARCHAR(10) NOT NULL DEFAULT 'Main'

Но я все еще получил то же исключение.

Я также удалил атрибут delta_set, я получил то же исключение. Это действительно смутило меня.

Я совершенно новичок в миграции данных. Таким образом, любая помощь в отношении этой ошибки и того, как я должен ее исправить, будет высоко оценена.

Заранее спасибо.

1 ответ

Документация DBDeploy не очень ясно об этом, но changelog Формат таблицы изменен между версиями 2.X и 3.X (см. инструкции по обновлению). Я подозреваю, что вы используете DBDeploy 3.X.

Вам нужно:

  1. Удалить старый changelog Таблица:

    DROP TABLE changelog;
    
  2. Воссоздайте его, используя новый формат:

    CREATE TABLE changelog (
      change_number INTEGER NOT NULL,
      complete_dt TIMESTAMP NOT NULL,
      applied_by VARCHAR(100) NOT NULL,
      description VARCHAR(500) NOT NULL
    );
    
    ALTER TABLE changelog ADD CONSTRAINT Pkchangelog PRIMARY KEY (change_number);
    

После этого все должно работать.

Другие вопросы по тегам