获取大序列的下一个值并插入

问题描述

我有下表,在当前表中,我们手动插入了数据,如下所示,但是现在我想将最新的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大于第一个查询返回的值。