在SQL中,如何更新表,将列设置为每行的不同值?

我想更新PostgreSQL数据库中的某些行,将一列设置为序列中的数字,其中该列具有唯一约束。我希望我可以使用:

update person set unique_number = (select nextval('number_sequence') );

但似乎 nextval 只被调用一次,因此更新对每一行使用相同的数字,并且我得到“重复密钥违反唯一约束”错误。我该怎么做呢?

有帮助吗?

解决方案

不要使用subselect,而是直接使用nextval函数,如下所示:

update person set unique_number = nextval('number_sequence');

其他提示

我认为pg的序列是一个hack并且表明增量整数不是键行的最佳方法。虽然pgsql在8.3之前没有获得对UUID的本机支持

http://www.postgresql.org/docs/8.3 /interactive/datatype-uuid.html

UUID的好处是组合几乎是无限的,不像有一天会碰到碰撞的随机数。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top