8

私はLiquibaseを評価しており、SQLスクリプトを使用するよりもデータ移行に利点があるかどうかを調べています。私が次のことをしているとしましょう:

私のバージョン0のデータベーススキーマは次のようになります。

CREATE TABLE  `Person` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `firstName` varchar(255) NOT NULL,
  `lastName` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
);

データベースには、次の挿入で表される既存のデータが入力されています。

INSERT INTO `Person` (`id`, `firstName`, `lastName`) VALUES (1, 'foo', 'bar');

次に、nullではない別の列をPersonテーブルに追加することにしましたが、既存のデータを失いたくありません。バージョン0からバージョン1への移行スクリプトは次のようになります。

ALTER TABLE `Person` ADD COLUMN `dob` date DEFAULT NULL;

UPDATE `Person` set `dob` = '1970-01-01';

ALTER TABLE `Person` MODIFY COLUMN `dob` NOT NULL;

Liquibaseはこのユースケースを簡単にすることができますか?

4

3 に答える 3

5

liquibaseが提供する主な機能は、どのデータベースにどの変更が適用されたかを追跡する機能です。

あなたの例では、リストしているSQLはliquibaseが行うこととまったく同じですが、開発データベースがバージョンYであることを知ることができ、データベースを「更新」すると、本番環境では2、3の新しい変更のみが適用されます。はバージョンXであり、本番環境を「更新」すると、さらに多くの変更が適用されます。

注:liquibaseは、単一のバージョンを使用して複数の開発者やコードブランチをサポートするのではなく、独立して変更を追跡します。

適用された変更を追跡する作業以外に、liquibaseが提供するその他の利点は次のとおりです。

  • 複数のデータベースタイプで同じ変更の説明を持つ機能。
  • 適用されるものにif/thenロジックを持つ機能。
  • データベース履歴の生成されたドキュメント。
  • より複雑なマルチステートメントの変更を簡単に指定する機能。
于 2012-04-06T17:38:54.660 に答える
1

私は最近同じことを経験しました。参照:既存のテーブルへのNULL不可の列の追加は失敗します。「value」属性は無視されていますか?

(単一のSQLステートメントで)既存の行の値を列のデフォルト値として設定せずに列を追加する方法はありません。したがって、既存の行に追加された新しい行とは異なる値を持たせたい場合(列にデフォルト値をまったく必要としない場合を含む)、少なくとも2つのSQLステートメントが必要になります。したがって、liquibaseを使用する場合でも、説明する3つのステップでこの列を追加する必要があります。

ですから、あなたの質問に対する私の答えは次のとおりです。はい、一連のSQLスクリプトを維持するだけでなく、liquibaseを使用することには利点があります。しかし、これはそれらの1つではありません。:)

于 2012-04-06T03:23:13.893 に答える
0

私の意見では、ダニはあなたに両方の長所を与えてくれます。SQLスクリプトを引き続き使用でき、データベースでスクリプトが実行されたかどうかを管理し、通常のRailsベースの移行またはLiquibaseと同じアップダウン機能を提供します。

どう考えているか教えてください。

https://github.com/soitgoes/mite

于 2012-07-28T22:35:11.393 に答える