用生成的系列填充列

the_darkside

从 Postgres 的自动递增主键 id 列中意外删除了信息,我的目标是用生成的一系列数据重新填充它。例如:

UPDATE mytable
SET id = (SELECT GENERATE_SERIES(1,3456))

这将引发错误:错误:用作表达式的子查询返回的多行

UPDATE mytable
SET id = SELECT a.n from generate_series(1, 3456) as a(n)

(抛出语法错误)

在 PostgreSQL 中使用生成的系列更新单列的正确方法是什么?为什么SET在这里不起作用?

戈登·利诺夫

如果您有主键,则可以执行以下操作:

UPDATE mytable t
    SET id = new_id
    FROM (SELECT tt.*, ROW_NUMBER() OVER (ORDER BY id) as new_id
          FROM mytable tt
         ) tt
    WHERE t.id = tt.id;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章