我正在使用PostgreSQL 9.4和pgAdminIII 1.20客户端。在特定表上启动INSERT时,会收到一条错误消息,说:Details: the key (gid)=(31509) already exists. (SQL State: 23505)
我不会在命令中输入gid值以让序列执行以下操作:

INSERT INTO geo_section (idnum, insee, ident) VALUES (25, '015233', '') ;

序列定义如下:
CREATE SEQUENCE geo_section_gid_seq
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 31509
  CACHE 1;
ALTER TABLE geo_section_gid_seq
  OWNER TO postgres;

以下查询返回34502
SELECT max(gid) FROM geo_section ;

因此,我试图改变序列以便从34503开始序列:
ALTER SEQUENCE geo_section_gid_seq START 34503 ;

我收到一条成功消息,说查询已正确执行。但是sequenceSTART参数仍然是31509值。。。

最佳答案

要更改序列的下一个值,请使用setval函数:

     select setval('geo_section_gid_seq'::regclass,34503,false)

假:如果你想下一个值是34503
正确:如果你想下一个值是34504

09-11 19:50