微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

postgresql – 插入初始数据后Postgres抱怨id’已存在’?

我有一个问题,Postgres在导入一些初始数据后抱怨重复ID,我试图看看如何增加id列计数器?

细节:

我最近将一些初始数据上传到Postgres表中,其中id设置为我的Sequelize模型定义中的自动增量.例如:

sequelize.define('user',{
        id: {
            type: Sequelize.INTEGER,primaryKey: true,autoIncrement: true
        },name: Sequelize.STRING
    }

数据插页如下:

INSERT INTO "users" ("id","name") VALUES(1,"bob");
INSERT INTO "users" ("id","name") VALUES(2,"brooke");
INSERT INTO "users" ("id","name") VALUES(3,"nico");

现在从我的node.js应用程序尝试插入新记录时,它抱怨Key(id)=(1)已经存在. sql Sequelize使用的形式如下:

INSERT INTO "users" ("id","name") VALUES(DEFAULT,"nico");

如果我清空记录表并再次尝试这个或重试操作足够多次,那么我看到计数器确实增加了.问题似乎Postgres根据记录无法判断当前的最大ID是多少?

在将初始数据上传数据库之后,告诉Postgres更新计数器的正确方法是什么?

BTW使用Postgres 9.6

解决方法

经过一番搜索后发现这将完成我需要做的事情.

SELECT setval('users_id_seq',max(id)) FROM users;

代码将id设置为表中的当前最大ID,这里是我的users表.注意,要检查序列是否与列相关联,这将起作用:

SELECT pg_get_serial_sequence('patients','id')

唯一需要注意的是你忽略了’公众’.部分返回值.

我将setval()添加到我的初始数据脚本中.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐