PostgreSQL在插入时使现有的主键自动递增

时间:2019-03-19 18:19:05

标签: postgresql

具有5列的现有表。

qid是PK,question geo_type user_input active

我需要能够插入到表中,并且每个新插入都会获得一个新的主键ID(这将是现有的最大ID +1)。

所以我需要能够做到这一点

insert into sip_questions (question,geo_type,user_input,active) values('noury','octagon',TRUE,TRUE)

但这给我这个错误

ERROR:  duplicate key value violates unique constraint "s_questions_pkey"
DETAIL:  Key (qid)=(1) already exists.

********** Error **********

ERROR: duplicate key value violates unique constraint "s_questions_pkey"
SQL state: 23505
Detail: Key (qid)=(1) already exists.

这是桌子

CREATE TABLE public.sip_questions
(
  qid integer NOT NULL DEFAULT nextval('s_questions_qid_seq'::regclass),
  question character varying(200),
  geo_type character varying(10),
  user_input boolean,
  active boolean,
  CONSTRAINT s_questions_pkey PRIMARY KEY (qid)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE public.sip_questions
  OWNER TO postgres;

我知道如何从像这样的新鲜桌子上做这个

ALTER TABLE table ADD COLUMN id SERIAL PRIMARY KEY; 

并且每次插入都会增加PK,而无需我指定id列

1 个答案:

答案 0 :(得分:1)

新序列必须达到当前最大值。

您可以使用重置它

SELECT setval('s_questions_qid_seq', max(id)) FROM sip_questions;