我有一个表product
,其中包含product_image_path
列。需要将这些数据部分移动到相关表格image
,该表格具有单独的列image_path
和代理键id
。这些表通过外键product.image_id
相关联。有没有办法将product_image_path
的所有值插入image
表并立即更新product.image_id
以引用刚刚创建的行?
这必须在SQL或PL / pgSQL中完成,因为它是一系列数据库迁移的一部分,不允许任意脚本。
product:
id | product_image_path
----+-------------------
1 | foo.jpg
2 | bar.jpg
3 | foo.jpg
应该成为:
product:
id | image_id
---+---------
1 | 1
2 | 2
3 | 3
image:
id | image_path
---+-----------
1 | foo.jpg
2 | bar.jpg
3 | foo.jpg
答案 0 :(得分:1)
如果新图片ID可以与产品ID相同,则非常简单:
创建新表:
Categories.update({
'_id': {
$in : array_of_IDs
}
},
{
$push :{
'courses':{ _id: ret._id , name: ret.title }
}
},{ multi: true }, function(err, respp){
//....
}
);
从产品表中复制数据:
create table image (id serial primary key, image_path text);
调整insert into image (id, image_path)
select id, product_image_path
from product;
列的顺序:
image.id
添加新的image_id列并填充它:
select setval(pg_get_serial_sequence('image', 'id'), (select max(id) from image));
摆脱old_column:
alter table product add image_id integer;
update product set image_id = id;