Как решить 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.
Вам нужно:
Удалить старый
changelog
Таблица:DROP TABLE changelog;
Воссоздайте его, используя новый формат:
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);
После этого все должно работать.