Sequelize Duplicate Key Constraint Violation

时间:2016-12-01 15:05:37

标签: postgresql sequelize.js

我正在尝试使用Sequelize和Postgresql通过显式创建的联结表添加多对多关系。

关系两侧的表格如下关联:

Shop.belongsToMany(models.user, {through: 'visits' })
User.belongsToMany(models.shop, {through: 'visits' })

访问联结表主键的定义如下:

id: {
 type: DataTypes.INTEGER,
 primaryKey: true,
 autoIncrement: true // Automatically gets converted to SERIAL for postgres
}

当我尝试插入访问时,我收到以下错误:

ERROR:  duplicate key value violates unique constraint "visits_shopId_userId_key"
DETAIL:  Key ("shopId", "userId")=(1, 12) already exists.

在执行pg_dump之后,我尝试通过向模型添加约束:false来删除复合键约束,但我仍然得到错误。

(我已经删除了表并在调试过程中多次重新生成)

1 个答案:

答案 0 :(得分:1)

在挖掘Sequelize issues之后,发现删除N:M复合键上的约束是一个简单的解决方法。

直通键可以使用unique: false属性:

Shop.belongsToMany(models.user, {
    through: {
        model: 'visits',
        unique: false
    },
    constraints: false
});