2

我正在尝试进行自动数据库迁移。我正在使用 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 属性,我得到了同样的异常。这真的让我很困惑。

我对数据迁移完全陌生。因此,任何有关此错误以及我应该如何处理的帮助将不胜感激。

先感谢您。

4

1 回答 1

0

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);
    

在此之后,一切都应该工作。

于 2013-01-27T12:57:43.460 回答