【问题标题】:Updating postgres column with sequence of integers [duplicate]用整数序列更新postgres列[重复]
【发布时间】:2021-04-12 15:55:06
【问题描述】:

我有一个包含 130 行的 postgres 表 bar。我想使用从 1 到 130 的递增整数序列自动填充 id 列。当我尝试以下代码时:

update bar
set id = t.num FROM (
SELECT  *
FROM    generate_series(1, 130) num) t

列已更新,但每一行都包含 1。我在这里做错了什么以及此过程的正确语法是什么?

【问题讨论】:

    标签: sql postgresql integer auto-populate


    【解决方案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 次。只保留一个更新 - 看似第一个,但您不能依赖它。

    【讨论】:

      猜你喜欢
      • 2018-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-04
      • 1970-01-01
      • 2016-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多