INSERT 失败,因为主键已经存在

INSERT fails because primary key already exists

我正在使用 PostgreSQL 9.4 和 pgAdminIII 1.20 客户端。在特定 table 上启动 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;

下面查询returns34502:

SELECT max(gid) FROM geo_section ;

因此,我试图改变序列以便从 34503:

开始序列
ALTER SEQUENCE geo_section_gid_seq START 34503 ;

我收到一条成功消息,说明查询已正确执行。但是序列 START 参数仍然具有 31509 值...

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

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

false :如果您希望下一个值是 34503

true :如果您希望下一个值是 34504

你应该执行这条命令:

SELECT setval('geo_section_gid_seq', (SELECT MAX(gid) FROM 'geo_section'), true)