用整数序列更新 postgres 列

问题描述

我有一个包含 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 次。只保留一个更新 - 看似是第一个,但您不能依赖它。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...