2

自動DB移行をしようとしています。同じために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: Could not update change log because: フィールド '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 に答える