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

Get next value of big serial and insert

我有以下 table,目前 table 我们手动插入了如下所示的数据,但现在我想将最新的 cola 值插入 table .

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 大于第一个查询返回的值。