SQL 迁移脚本 - 插入到带有输出 ID 的选择中
Posted
技术标签:
【中文标题】SQL 迁移脚本 - 插入到带有输出 ID 的选择中【英文标题】:SQL migration script - insert into select with output ID 【发布时间】:2021-11-15 19:36:09 【问题描述】:我正在使用PostgreSQL
和Flyway
在应用程序中执行数据迁移。这个想法是将行从一个表移动到另一个表,并在旧表中保持旧表和新表之间的链接。因此,假设我们有一个包含列(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 中新创建的行
【问题讨论】:
【参考方案1】:您可以使用 CTE,假设 name2
、user_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;
【讨论】:
以上是关于SQL 迁移脚本 - 插入到带有输出 ID 的选择中的主要内容,如果未能解决你的问题,请参考以下文章