更改列中的数据类型时将 int 转换为值

phu*_*ury 5 liquibase

liquibase 是否可以在执行 a 时进行某种映射modifyDataType

考虑以下示例:

<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>
Run Code Online (Sandbox Code Playgroud)

我希望在我的“类型”列中发生以下映射:

0->single
1->married
etc..
Run Code Online (Sandbox Code Playgroud)

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

Jen*_*ens 5

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

一种方法是使用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>
Run Code Online (Sandbox Code Playgroud)

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

只有当 id 为 2 的变更集运行成功时,您才能添加一个前提条件来执行此变更集。