Sequelize 重复键约束违规

Posted

技术标签:

【中文标题】Sequelize 重复键约束违规【英文标题】:Sequelize Duplicate Key Constraint Violation 【发布时间】:2016-12-01 15:05:37 【问题描述】:

我正在尝试通过使用 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 后,我尝试通过在模型中添加 constraint: false 来移除复合键约束,但仍然出现错误。

(我在调试过程中删除了表并重新同步了几次)

【问题讨论】:

【参考方案1】:

在对Sequelize issues 进行了深入研究之后,事实证明,移除 N:M 复合键上的约束很容易解决。

through 键可以获取具有unique: false 属性的对象:

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

【讨论】:

以上是关于Sequelize 重复键约束违规的主要内容,如果未能解决你的问题,请参考以下文章

Laravel:完整性约束违规:1062重复条目'jon@doe.com'键'users_email_unique'

SQLSTATE [23000]:完整性约束违规:1062 键 'tbl_item_item_ID_UNIQUE' 的重复条目 '25'

SQLSTATE [23000]:完整性约束违规:1062 键“users_melli_unique”的重复条目“0430142821”

如何修复完整性约束违规:1062 键“PRIMARY:Laravel Pivot Table”的重复条目“1-1”

Laravel - SQLSTATE [23000]:完整性约束违规:1062 键“posts_user_id_unique”的重复条目“1”

修复了Innodb完整性约束违规:1452 [重复]