如何使用PostgreSQL序列更新SQL中的唯一值?
时间:2020-03-06 14:52:01 来源:igfitidea点击:
在SQL中,如何更新表,将每一行的列设置为不同的值?
我想更新PostgreSQL数据库中的某些行,将一列设置为序列中的数字,其中该列具有唯一约束。我希望我可以使用:
update person set unique_number = (select nextval('number_sequence') );
但似乎nextval只调用一次,因此更新对每一行使用相同的数字,并且出现"重复键违反唯一约束"错误。我该怎么办呢?
解决方案
不要使用子选择,而是直接使用nextval函数,如下所示:
update person set unique_number = nextval('number_sequence');
我认为pg的序列是一个骇人听闻的迹象,并表明递增整数不是键行的最佳方法。尽管pgsql直到8.3才获得对UUID的本机支持
http://www.postgresql.org/docs/8.3/interactive/datatype-uuid.html
UUID的好处是,组合几乎是无限的,这与随机数有一天会发生碰撞是不同的。