在验证错误上继续递增id

时间:2015-09-01 02:34:10

标签: javascript postgresql sequelize.js

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会不断增加,即使它没有添加到数据库中。无论如何要解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

Sequelize并不提供id值,PostgreSQL本身就是。{据推测,Sequelize对serial列使用id类型,并从数据库序列和fine manual获取其值:

  

注意:由于smallserialserialbigserial是使用序列实现的,因此可能存在"漏洞"或列中出现的值序列中的间隙,即使没有删除任何行。从序列中分配的值仍然用完了#34;即使包含该值的行永远不会成功插入表列。例如,如果插入事务回滚,则可能发生这种情况。有关详细信息,请参阅第9.16节中的nextval()

您正在尝试执行违反唯一性约束的INSERT以及您的回滚交易。

您不应该浪费时间关注特定的id值,他们是唯一的数字,这一切都很重要。