我正在尝试进行自动数据库迁移。我正在使用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);
build.gradle中的updateDatabase任务是:
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属性,我得到了同样的异常。这让我很困惑。
我对数据迁移完全陌生。所以,对于这个错误的任何帮助以及我应该怎么做都将深表感谢。
提前谢谢。
答案 0 :(得分:0)
DBDeploy文档对此并不十分明确,但changelog
表格格式在版本2.X和3.X之间发生了变化(请参阅upgrade instructions)。我怀疑你使用的是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);
在此之后,一切都应该有效。