如何使用PostgreSQL序列更新SQL中的唯一值?
-
02-07-2019 - |
题
在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的好处是组合几乎是无限的,不像有一天会碰到碰撞的随机数。
不隶属于 StackOverflow