问题描述
我有下表,在当前表中,我们手动插入了数据,如下所示,但是现在我想将最新的cola
值插入表中。
create table tbTest
(
cola bigserial not null primary key,colb varchar(10)
);
insert into tbTest(cola,colb) values(1,'A');
insert into tbTest(cola,colb) values(2,'B');
insert into tbTest(cola,colb) values(3,'C');
insert into tbTest(cola,colb) values(4,'D');
insert into tbTest(cola,colb) values(5,'E');
insert into tbTest(cola,colb) values(6,'F');
现在,我只想插入列colb
的值,然后让串行列自行计算下一个值:
尝试1:
insert into tbTest(colb) values('G')
错误:sql Error [23505]: ERROR: duplicate key value violates unique constraint "tbtest_pkey" Detail: Key (cola)=(1) already exists.
尝试2:
insert into tbTest(cola,colb) values(nextval('tbtest_cola_seq'),'G')
错误:sql Error [23505]: ERROR: duplicate key value violates unique constraint "tbtest_pkey" Detail: Key (cola)=(2) already exists.
尝试3:
insert into tbTest(cola,colb) values(currval('tbtest_cola_seq')+1,'G');
错误:sql Error [23505]: ERROR: duplicate key value violates unique constraint "tbtest_pkey" Detail: Key (cola)=(3) already exists.
解决方法
您必须调整顺序以从大于最大现有值的值开始。
第一
SELECT max(cola) FROM tbtest;
获得最大值。
然后重置序列:
SELECT setval('tbtest_cola_seq',42);
其中42大于第一个查询返回的值。