我的表中有一个主键,如下所示:
CREATE TABLE a (
id serial NOT NULL,
valuea citext NOT NULL,
CONSTRAINT a_pkey PRIMARY KEY (id),
);
表格包含以下行:
id value
198 b
199 j
偶然我做了这个插入
Insert Into a(id,valuea) values (200,'hello');
现在,当我尝试以正确的方式进行另一次插入时:
Insert Into a(valuea) values ('b');
我希望它插入(201,b)但是由于上一次手动插入,串行计数器不知道200已被使用。
我明白了:
错误:重复键值违反了唯一约束 " a_pkey" DETAIL:Key(id)=(200)已经存在。
我理解这个错误..基本上是因为我的上一次插入没有使用Serial,因此它的计数器没有上升。
我不知道如何解决它?
如何告诉串口计数器从201开始?
答案 0 :(得分:2)
您需要找到序列名称,通常类似于<your table>_id_seq
并执行:
ALTER SEQUENCE a_id_seq INCREMENT BY 1;
答案 1 :(得分:2)
当您创建serial
键时,Postgres会创建一个序列,用于生成下一个值。
只需找到该序列并将其START
值修改为例如201。
SELECT setval(<name of the sequence>, 201, true);