3

DB のレイアウトを変更するために liquibase を使用しようとしていますが、次のような質問があります。

たとえば、古い DB には 2 つの列 (firstName、lastName) を持つテーブルがあり、新しい DB にはこれら 2 つの列 (userName) に対して 1 つの列しかないとします。

liquibase と Spring を使用してこの移行を行うにはどうすればよいですか。次のロジックでは、元の値が失われるためです。

理想的には、Java コードを呼び出して変更を加えることができるようにしたいと考えていますが、この場合はオーバー エンジニアリングです。

<databaseChangeLog
    xmlns="http://www.liquibase.org/xml/ns/dbchangelog/1.1"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog/1.1
    http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-1.1.xsd">

    <changeSet author="gcardoso" id="2012082703">

        <dropColumn columnName="firstName" tableName="t_user"/>
        <dropColumn columnName="lastName" tableName="t_user"/>

        ?????? How to migrate the names ??????

        <addColumn tableName="t_user">
            <column name="userName" type="VARCHAR2(255,0)">
                <constraints nullable="false"/>
            </column>
        </addColumn>
    </changeSet>
</databaseChangeLog>
4

1 に答える 1

3

カスタム リファクタリングが必要です。次の 2 つの可能性があります。

だからあなたは

  1. 新しい列を追加する
  2. カスタム リファクタリングの変更により、古い列から新しい列にデータを移行する
  3. 古い列を削除する

Spring JdbcTemplate でカスタム リファクタリング クラスを使用する方法

@Override
public void execute(Database database) throws CustomChangeException {
    JdbcConnection connection = (JdbcConnection) database.getConnection();
    DataSource dataSource = new SingleConnectionDataSource(connection.getUnderlyingConnection(), true);
    JdbcTemplate template = new JdbcTemplate(dataSource, false);
}
于 2012-08-27T15:12:22.413 に答える