【问题标题】:How to set up manually the next value of auto_increment?如何手动设置 auto_increment 的下一个值?
【发布时间】:2012-04-24 06:43:01
【问题描述】:

我手动向表中添加了一些行,并且手动设置了 ID (auto_increment)。现在,当我尝试通过我的应用程序将新行添加到数据库表中时,数据库表中出现错误,即创建的 ID 值已经存在。

如何手动设置下一个 ID 值(例如,在表中我必须设置 ID,那么如何告诉 PostgreSQL,下一个 ID 应该从数字 3 开始计算)?

【问题讨论】:

    标签: sql postgresql auto-increment


    【解决方案1】:

    http://www.postgresql.org/docs/current/static/functions-sequence.html

    select setval('sequence-name', <new-value>);
    

    您可以从表定义中获取序列名称:

    id       | integer                | not null default nextval('id_seq'::regclass)
    

    在这种情况下,序列被命名为“id_seq”

    编辑(@Glenn 的 10 倍):

    SELECT setval('id_seq', max(id)) FROM table;
    

    【讨论】:

    • 并将 设置为 SELECT MAX(id)+1 FROM myTable 的结果。
    • 根据文档 setval,给定的两个参数将给定的序列值设置为给定的数字 max(id),这在技术上将 nextval 设置为 max(id)+1。换句话说,你不应该使用 max(id)+1 除非你想跳过 max(id)+1 数字,或者使用 false 作为第三个参数。
    【解决方案2】:

    我认为有一个更简单的方法:

    ALTER SEQUENCE "seq_product_id"  RESTART WITH 10
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-06
      • 2021-04-11
      • 2019-06-20
      相关资源
      最近更新 更多