在 PostgreSQL 整数列上生成序列号

bar*_*oma 2 sql postgresql

我有一个关于 PostgreSQL 的表,其中有 1000 行。我的表中有一个整数列是空的。我想填充newid顺序的、唯一的数字,有点像主键。

Product
-------------------------
id  name  newid  size
60   ....  null   L
72   ....  null   M
83   ....  null   xl
84   ....  null   S
85   ...
Run Code Online (Sandbox Code Playgroud)

如何编写更新我的newid列的查询。

Product
-------------------------
id  name  newid  size
60   ....  1      L
72   ....  2      M
83   ....  3      xl
84   ....  4      S
85   ...
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 5

您可以使用JOIN或子查询执行此操作。这个想法是使用计算新的 idrow_number()然后将该值带入每一行:

with newvals (
      select p.*, row_number() over (order by id) as seqnum
      from product p
     )
update product p
    set newid = (select seqnum from newvals nv where nv.id = p.id);
Run Code Online (Sandbox Code Playgroud)