在列中更改数据类型时将int转换为value

时间:2013-03-18 14:38:39

标签: liquibase

在执行'modifyDataType'时,liquibase是否可以进行某种映射?

考虑以下示例:

<changeSet id="1" author="me">
    <createTable tableName="person">
        <column name="id" type="int">
            <constraints primaryKey="true" nullable="false" />
        </column>
        <column name="firstName" type="varchar(100)"></column>
        <column name="lastName" type="varchar(100)"></column>
        <column name="marital_status" type="int">
            <constraints nullable="false" />
        </column>
    </createTable>
</changeSet>
<changeSet id="2" author="me">
    <modifyDataType tableName="person" columnName="type"
        newDataType="varchar(36)" />
</changeSet>

我想在我的专栏'type'中发生以下映射:

0->single
1->married
etc..

liquibase可以吗?我通过命令行使用它。

1 个答案:

答案 0 :(得分:4)

我认为这不可能直接通过某种映射或重构来实现。

执行此操作的一种方法是使用sql并将其放入另一个更改集中,该更改集在更改数据类型的更改集之后运行:

<changeSet id="3" author="me">
    <sql>
        update person set martial_status = 'single' where martial_status = 0;
        update person set martial_status = 'married' where martial_status = 1;
    </sql>
</changeSet>

我只是把它写下来作为一个想法。这是未经测试的。

只有在ID为2的变更集成功运行时,您才可以添加precondition来执行此变更集。

相关问题