Liquibase 添加一个新列并用另一现有列的值填充新列,仅当该列不存在时才执行操作

Bkf*_*sec 3 liquibase

在同一张表中,我必须将一列的值迁移到新的一列;我想创建一个新列,用其他列的值填充它并删除已迁移的旧列,只有在尚未创建新列时才会发生这种情况。

<changeSet author="xxxx" id="00021">
        <preConditions onFail="MARK_RAN">
            <not>
                <columnExists schemaName="schema" tableName="talbee" columnName="new_table"/>
            </not>
        </preConditions>
        <addColumn schemaName="schema" tableName="new_table">
            <column name="new_column" type="text"/>
        </addColumn>

        <sql>UPDATE table_name SET new_column = old_column</sql>

        <dropColumn  
          catalogName="cat"  
          columnName="old_column"
          schemaName="schema"  
          tableName="table_name">  
        <column  name="old_column"/>  

    </dropColumn> 
 
    </changeSet>
Run Code Online (Sandbox Code Playgroud)

我删除旧列的方式是否正确?

只重命名该列会更好吗?

hts*_*ame 9

是的,重命名现有列更合理。您可以使用<columnExists>前提条件然后<renameColumn>进行更改。

<changeSet author="xxxx" id="00021">
    <preConditions onFail="MARK_RAN">
        <tableExists tableName="table_name"/>
        <columnExists tableName="table_name" columnName="old_column"/>
        <not>
            <columnExists tableName="table_name" columnName="new_column"/>
        </not>
    </preConditions>
    <renameColumn tableName="table_name" oldColumnName="old_column" newColumnName="new_column" 
                  columnDataType="text"/>
</changeSet>
Run Code Online (Sandbox Code Playgroud)