如何解决获取大序列的下一个值并插入
我有下表,在当前表中,我们手动插入了数据,如下所示,但是现在我想将最新的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大于第一个查询返回的值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。