问题描述
我有一个包含 130 行的 postgres 表 bar
。我想用从 1 到 130 的递增整数序列自动填充 id
列。当我尝试以下代码时:
update bar
set id = t.num FROM (
SELECT *
FROM generate_series(1,130) num) t
该列已更新,但每行都包含 1。我在这里做错了什么以及此过程的正确语法是什么?
解决方法
您需要一个主键来标识每一行。然后你可以使用:
update bar b
set id = b2.new_id
from (select b.*,row_number() over (order by id) as new_id
from bar
) b2;
where b.pk = b2.pk;
您的版本尝试更新每一行 130 次。只保留一个更新 - 看似是第一个,但您不能依赖它。