Sequelize正在增加id,即使它没有将它添加到数据库中。
例如,对于我的用户模式:
var User = sequelize.define("User", {
email: {
type: DataTypes.STRING,
unique: true,
allowNull: false,
},
password: {
type: DataTypes.STRING,
allowNull: false,
},
},
如果我跑
var newUser = User.create({
email: "a",
password: "a"
})
我得到了id 1,但是如果我再次运行它会得到验证错误
接下来,如果我使用其他电子邮件运行
var newUser = User.create({
email: "b",
password: "a"
})
id为3,即使db只有2个enteries(id 1和3)
我不太明白为什么id会不断增加,即使它没有添加到数据库中。无论如何要解决这个问题吗?
答案 0 :(得分:2)
Sequelize并不提供id
值,PostgreSQL本身就是。{据推测,Sequelize对serial
列使用id
类型,并从数据库序列和fine manual获取其值:
注意:由于
smallserial
,serial
和bigserial
是使用序列实现的,因此可能存在"漏洞"或列中出现的值序列中的间隙,即使没有删除任何行。从序列中分配的值仍然用完了#34;即使包含该值的行永远不会成功插入表列。例如,如果插入事务回滚,则可能发生这种情况。有关详细信息,请参阅第9.16节中的nextval()
。
您正在尝试执行违反唯一性约束的INSERT以及您的回滚交易。
您不应该浪费时间关注特定的id
值,他们是唯一的数字,这一切都很重要。