用生成的系列填充列
Populate column with generated series
不小心从 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;
如果您删除了某些行的 id 列,想再次给它们一个 ID 并且不关心 ID 是什么,您可以使用类似的东西:
UPDATE mytable
SET id = nextval('mytable_id_seq')
WHERE id IS NULL
不小心从 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;
如果您删除了某些行的 id 列,想再次给它们一个 ID 并且不关心 ID 是什么,您可以使用类似的东西:
UPDATE mytable
SET id = nextval('mytable_id_seq')
WHERE id IS NULL