PostgreSQL - 如何手动设置auto_increment的下一个值?

use*_*621 8 sql postgresql auto-increment

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

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

str*_*kol 22

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

select setval('sequence-name', <new-value>);
Run Code Online (Sandbox Code Playgroud)

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

id       | integer                | not null default nextval('id_seq'::regclass)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,序列名为'id_seq'

编辑(10倍到@Glenn):

SELECT setval('id_seq', max(id)) FROM table;
Run Code Online (Sandbox Code Playgroud)

  • 并将&lt;new-value&gt;设置为myTable的SELECT MAX(id)+1的结果。 (2认同)

小智 9

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

ALTER SEQUENCE "seq_product_id"  RESTART WITH 10
Run Code Online (Sandbox Code Playgroud)