【问题标题】:SQL migration script - insert into select with output IDSQL 迁移脚本 - 插入到带有输出 ID 的选择中
【发布时间】:2021-11-15 19:36:09
【问题描述】:

我正在使用PostgreSQLFlyway 在应用程序中执行数据迁移。这个想法是将行从一个表移动到另一个表,并在旧表中保持旧表和新表之间的链接。因此,假设我们有一个包含列(id、name、user_id)的 Table_1 和一个包含类似列(id2、name2、user_id2)的新 Table_2

现在,第一步是向 Table_1 添加一列,将其对应的 id 存储在新的 Table_2 中。所以:

alter Table_1 add column if not exists migrated_table_2_id int;

现在我想写一个sql,将数据从Table_1迁移到Table_2,同时填写migrated_table_2_id列中的id值。所以像:

insert into Table_2 (name2, user_id2) select name, user_id from Table_1;

但在migrated_table_2_id 中填写表 2 中新创建的行

【问题讨论】:

    标签: sql postgresql flyway data-migration


    【解决方案1】:

    您可以使用 CTE,假设 name2user_id2 或两者的组合是唯一的:

    with i as (
          insert into Table_2 (name2, user_id2)
              select name, user_id 
              from Table_1
              returning *
         )
    update table_1 t1
        set t1.user_id2 = t2.id
        from table_2 t2
        where t2.name = t1.name and t2.user_id2 = t.user_id;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-15
      • 1970-01-01
      • 2018-05-27
      • 1970-01-01
      相关资源
      最近更新 更多