我遇到一个问题,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
最佳答案
经过更多搜索后发现这将完成我需要做的事情。
SELECT setval('users_id_seq', max(id)) FROM users;
此代码会将 id
设置为表中的当前最大 id,这里是我的 users
表。请注意,要检查序列是否与列相关联,这将起作用:
SELECT pg_get_serial_sequence('patients', 'id')
唯一需要注意的是您忽略了“公众”。返回值中的一部分。
我会将 setval()
添加到我的初始数据脚本中。
关于postgresql - Postgres 在插入初始数据后提示 id 'already exists'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44708548/