如何使用PostgreSQL序列更新SQL中的唯一值?

时间:2008-09-29 08:56:43

标签: sql postgresql sequences

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

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

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

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

2 个答案:

答案 0 :(得分:28)

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

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

答案 1 :(得分:0)

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

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

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