代码之家  ›  专栏  ›  技术社区  ›  Peter Hilton

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

  •  11
  • Peter Hilton  · 技术社区  · 16 年前

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

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

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

    但看起来 纳斯特瓦尔 只调用一次,因此更新对每行使用相同的数字,并且我得到一个“重复键违反唯一约束”错误。我该怎么办?

    2 回复  |  直到 16 年前
        1
  •  28
  •   Grey Panther    16 年前

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

    update person set unique_number = nextval('number_sequence');
    
        2
  •  0
  •   TravisO    16 年前

    我认为pg的序列是一个hack,并指出递增整数不是获得关键行的最佳方法。虽然pgsql直到8.3才获得UUID的本机支持

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

    uuid的好处是其组合几乎是无限的,不像一个随机数,它有一天会发生碰撞。