由于delta_set中没有默认值,如何在dbdeploy中解决SchemaVersionTrackingException?

时间:2012-10-31 11:11:00

标签: gradle database-migration dbdeploy

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

我对数据迁移完全陌生。所以,对于这个错误的任何帮助以及我应该怎么做都将深表感谢。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

DBDeploy文档对此并不十分明确,但changelog表格格式在版本2.X和3.X之间发生了变化(请参阅upgrade instructions)。我怀疑你使用的是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);
    
  3. 在此之后,一切都应该有效。