我在PostgreSQL中有一个表,该表具有应该是唯一的ID列。但是,当前许多行(大约300万行)的ID为“ 1”。
我知道的:
我需要的是一个查询,该查询将提取ID为“ 1”的所有行,并为其分配一个新ID,该ID自动递增,以便表中的每一行都具有唯一的ID。我希望它从开始,currentMaxId + 1并为每行分配后续ID。
currentMaxId + 1
这是我得到的最接近的查询:
UPDATE table_name SET id = ( SELECT max(id) FROM table_name ) + 1 WHERE id = '1'
问题是内部SELECT仅在第一次运行,因此将有问题的行的ID设置为原始行max(id) + 1,而不是max(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;