如何在PostgreSQL中设置序列类型的值?

22 浏览
0 Comments

如何在PostgreSQL中设置序列类型的值?

这个问题已经有答案了

如何在Postgres的主键序列失去同步时重置它?

我的表中有一个主键,如下所示:

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已经被使用,因为最后一个手动插入。

我得到:

ERROR: 重复键值违反唯一约束条件

\"a_pkey\" DETAIL: 键(id)=(200)已经存在。

我理解这个错误..基本上是因为我的最后一个插入没有使用序列,因此它的计数器没有上升。

我不知道的是如何解决这个问题?

我该如何告诉序列计数器从201开始?

admin 更改状态以发布 2023年5月22日
0
0 Comments

当您创建一个serial键时,Postgres会创建一个用于生成下一个值的序列。

只需找到该序列并修改其START值,例如将其改为201。

SELECT setval(<序列的名称>, 201, true);

0
0 Comments

你需要找到序列名,通常类似于_id_seq,然后执行:

ALTER SEQUENCE a_id_seq INCREMENT BY 1;

0