2015-09-01 51 views
0

Sequelize會增加id,即使它沒有將其添加到數據庫中。驗證錯誤上的sequelize incrementing 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" 
    }) 

即使數據庫只有2個輸入端(id 1和3),但id仍然是3(012和4)

我不太明白爲什麼id不斷增加,即使它沒有被添加到數據庫中。無論如何要解決這個問題嗎?

回答

0

Sequelize不提供id值,PostgreSQL本身就是。據推測Sequelize使用serial型爲id柱和從數據庫序列和從fine manual獲得其值:

注意:由於smallserialserialbigserial使用序列實現,可以有「洞」或即使沒有行被刪除,也會出現在列中的值序列中。即使包含該值的行從未成功插入表列,從序列中分配的值仍會「用完」。例如,如果插入事務回滾,則可能發生這種情況。有關詳細信息,請參閱第9.16節中的nextval()

您試圖執行違反唯一性約束的INSERT,並且存在回滾事務。

您不應該浪費時間關注特定的id值,它們是唯一的數字,這就是最重要的。

+0

感謝您的好解釋 – Saad