私はデータ移行の世界に不慣れで、OurApp 1.0 を使用している顧客のデータを、OurApp 2.0 と互換性のあるスキーマを持つ新しいデータベースに移行する方法を探しています。データベースの変更管理やデータベースのリファクタリング タスクに Liquibase を推奨している人を何人も見てきました。
しかし、www.liquibase.org の資料を読んだ後、Liquibase は既存のデータを新しいスキーマに永続化できるように変換することよりも、スキーマを最新の状態に保つことに重点を置いているように感じました。
Employee テーブルの name という名前の列を、firstname と lastname の列に分割したいとします。Liquibase は、name 列を削除し、firstname と lastname 列を追加することで、テーブルを変更できます。しかし、Liquibase は、データベース内の既存のレコードの名前フィールドをファーストネームとラストネームに解析し、それらをそれぞれの列に格納する変換コードをプラグインするように構築されていないように感じます。
たとえば、私のテーブルがこのように見えたとします
id | name | position
*********************************
12 Horace Slughorn Professor
13 Albus Dumbledore Headmaster
Liquibase を実行すると、name 列が firstname と lastname 列に置き換えられるため、データベース スキーマは正しくなります。しかし、Liquibase は、「Horace Slughorn」を「Horace」と「Slughorn」に解析し、これらの値をそのレコードの名と姓の列に格納するコードをプラグインできるフレームワークではないと推測しています。
id | firstname | lastname | position
*****************************************
12 Horace Slughorn Professor
13 Albus Dumbledore Headmaster
そのため、Liquibase はスキーマを最新の状態に保ちますが、既存のデータを変換して新しいスキーマに一致させるようには設計されていません。そうですか?