加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql – postgres autoincrement没有更新显式id插入

发布时间:2020-12-13 16:41:56 所属栏目:百科 来源:网络整理
导读:我在postgres中有以下表格: CREATE TABLE "test" ( "id" serial NOT NULL PRIMARY KEY,"value" text) 我在做以下插入: insert into test (id,value) values (1,'alpha')insert into test (id,value) values (2,'beta')insert into test (value) values ('g
我在postgres中有以下表格:
CREATE TABLE "test" (
    "id" serial NOT NULL PRIMARY KEY,"value" text
)

我在做以下插入:

insert into test (id,value) values (1,'alpha')
insert into test (id,value) values (2,'beta')

insert into test (value) values ('gamma')

在前两个插入中,我明确提到了id。但是在这种情况下,表的自动增量指针不会更新。因此在第三个插入我得到错误:

ERROR:  duplicate key value violates unique constraint "test_pkey"
DETAIL:  Key (id)=(1) already exists.

我从来没有在MyISAM和INNODB引擎中的Mysql中遇到这个问题。显而易见,mysql总是根据最大行ID来更新autoincrement指针。

postgres中的这个问题的解决方法是什么?我需要它,因为我想对我的表中的一些ids进行更严格的控制。

更新:
我需要它,因为一些值我需要一个固定的id。对于其他新的条目,我不介意创建新的条目。

我认为只要我明确地插入ids,可能手动将nextval指针递增到max(id)1。但我不知道该怎么做

这就是它应该如何工作 – 仅当系统需要此列的值并且尚未提供的值时,才会调用next_val(‘test_id_seq’)。如果您提供值,则不执行此类呼叫,因此序列不会“更新”。

您可以使用明确提供的值在上次插入之后手动输入序列值为setting:

SELECT setval('test_id_seq',(SELECT MAX(id) from "test"));

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读