在SQL中,如何更新表,将列设置为每行的不同值?
我想更新PostgreSQL数据库中的某些行,将一列设置为序列中的数字,其中该列具有唯一约束。我希望我可以使用:
update person set unique_number = (select nextval('number_sequence') );
但似乎 nextval 只被调用一次,因此更新对每一行使用相同的数字,并且我得到“重复密钥违反唯一约束”错误。我该怎么做呢?
答案 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的好处是组合几乎是无限的,不像有一天会碰到碰撞的随机数。