Liquibase for / for each operations(迁移表数据)

时间:2016-01-20 16:43:51

标签: sql liquibase

我正在使用Liquibase,我需要在一个表中插入数据,具体取决于另一个表中的条目(创建外键引用)

Table: Entities (currently empty)
PK id
INT data

Table: Existing_table (contains data)
PK id
... data
FK entities_id (references Entities.id)

Existing_table中的每个条目我需要在Entities中插入一个值,并使用创建的entities_id更新Existing_table中的Entities.id key

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

无法找到制作参数化循环的方法,因此使用了一个temopary列来存储引用的id。

<changeSet id="add temp_column to Entities" author="">
    <addColumn tableName="Entities">
        <column name="temp_id" type="BIGINT"></column>
    </addColumn>
 </changeSet>

<changeSet author="" id="insert Existing_table keys into Entities">
    <sql>
        INSERT INTO Entities(type_id, temp_id)
        select 1, id
        from Existing_table;
    </sql>
</changeSet>

<changeSet author="" id="insert entity keys into Existing_table">
    <sql>
        UPDATE Existing_table d set entity_id = ent.id
        FROM (select id, temp_id
        from Entities) ent
        where ent.temp_id = d.id;
    </sql>
</changeSet>


<changeSet id="drop temp_column to Entities" author="">
    <dropColumn tableName="Entities"
                columnName="temp_id"/>
</changeSet>



<changeSet author="" id="addNotNullConstraint Existing_table-Entities">
    <addNotNullConstraint columnDataType="BIGINT"
                          columnName="entity_id"
                          tableName="Existing_table"/>
</changeSet>