INSERT失败,因为主键已存在

时间:2016-06-27 09:14:46

标签: postgresql primary-key sequence postgresql-9.4

我正在使用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 ;

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

1 个答案:

答案 0 :(得分:5)

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

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

false:如果你想下一个值将是34503

true:如果你想下一个值将是34504