【发布时间】:2017-11-26 06:33:23
【问题描述】:
我有一个问题,即 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) already exists。 SQL Sequelize 使用的形式是:
INSERT INTO "users" ("id","name") VALUES(DEFAULT, "nico");
如果我清空记录表并重试此操作或重试操作足够多次,那么我看到计数器确实增加了。这个问题似乎 Postgres 无法根据记录判断当前的最大 id 是多少?
在将初始数据上传到数据库后,告诉 Postgres 更新计数器的正确方法是什么?
顺便说一句,使用 Postgres 9.6
【问题讨论】:
-
链接文章中描述的行为与我们在此处看到的一致。那就是手动指定 id 值不会更新序列。只有
DEFAULT会增加值,因此刷新序列似乎很重要。这与 MySQL 不同,例如,MySQL 根据列中的最大值自动递增。
标签: postgresql