【问题标题】:PostgreSQL: Extract column into separate table and update other column with related keyPostgreSQL:将列提取到单独的表中并使用相关键更新其他列
【发布时间】:2016-10-28 16:53:46
【问题描述】:

我有一张表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

【问题讨论】:

  • 添加一些示例表数据,包括版本之前和之后的版本。 (以及格式化的文本。)
  • @jarlh 我现在添加了一些示例数据。

标签: sql postgresql


【解决方案1】:

如果新的图像 id 可以和产品 id 相同,这很容易:

创建新表:

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列的顺序:

select setval(pg_get_serial_sequence('image', 'id'), (select max(id) from image));

添加新的 image_id 列并填充它:

alter table product add image_id integer;
update product set image_id = id;

摆脱旧列:

alter table product drop product_image_path;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-01
    • 1970-01-01
    相关资源
    最近更新 更多