我在 PostgreSQL 中有一个表,它有一个应该是唯一的 ID 列。然而,当前大量行(大约 300 万行)的 ID 为“1”。
我知道的:
- 总行数
- ID 列的当前最大值
- ID(不正确)为“1”的行数
我需要的是一个查询,它将提取 ID 为“1”的所有行,并为它们分配一个自动递增的新 ID,以便表中的每一行都具有唯一的 ID。我希望它开始于currentMaxId + 1
并为每一行分配后续 ID。
这是我通过查询得到的最接近的结果:
UPDATE table_name
SET id = (
SELECT max(id) FROM table_name
) + 1
WHERE id = '1'
这样做的问题是内部 SELECT 仅在第一次运行,因此将相关行的 ID 设置为原始行的 IDmax(id) + 1
,不是新的max(id) + 1
每次都给我同样的问题,我试图解决。
任何有关如何调整此查询以实现我想要的结果或替代方法的建议将不胜感激!
您可以按照临时顺序逐步进行。
1)创作
create temporary sequence seq_upd;
2)设置合适的初始值
select setval('seq_upd', (select max(id) from table_name));
3)更新
update table_name set id=nextval('seq_upd') where id=1;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)