psql onDelete的续集:级联不工作
我无法使psql onDelete的续集:级联不工作,sql,postgresql,sequelize.js,Sql,Postgresql,Sequelize.js,我无法使{onDelete:'cascade'}工作。我有一个用户表,它有许多关联(20?),删除一个用户行失败,因为主键依赖于许多其他表。我尝试了以下方法: 在父关联上设置{onDelete:'cascade'} 还包括父关联上的{hooks:true} 在子关联上设置{onDelete:'cascade'} 编写迁移以将{onDelete:'cascade'}添加到users表上的id类型,但收到以下错误,因为无法删除主键约束以添加更改错误:无法删除表用户上的约束users\u pkey,因
{onDelete:'cascade'}
工作。我有一个用户表,它有许多关联(20?),删除一个用户行失败,因为主键依赖于许多其他表。我尝试了以下方法:
{onDelete:'cascade'}
{hooks:true}
{onDelete:'cascade'}
{onDelete:'cascade'}
添加到users表上的id类型,但收到以下错误,因为无法删除主键约束以添加更改错误:无法删除表用户上的约束users\u pkey,因为其他对象依赖它
{onDelete:'cascade',hooks:true}
我认为问题在于,
{onDelete:'cascade'}
无法处理我的模型关联,但真正的问题是我没有首先将onDelete:'cascade'
约束添加到具有迁移的相关表上的外键
我忽略了一个简单的事实,即sequelize.js是一个ORM或类似于一个简化与数据库交互的抽象层。sequelize模型反映了可以实现的功能。因此,首先需要根据需要正确设置表(onDelete需要设置为“cascade”或“sell null”等),然后sequelize才能促进请求
例如:
//创建用户表迁移
await queryInterface.createTable('users', {
id: {
type: Sequelize.UUID,
defaultValue: Sequelize.literal('uuid_generate_v4()'),
primaryKey: true,
},
first_name: Sequelize.STRING(100),
last_name: Sequelize.STRING(100),
profile_photo: Sequelize.STRING(200),
});
//电子邮件表(意外)创建时没有外键约束以在删除时级联
await queryInterface.createTable('emails', {
id: {
type: Sequelize.UUID,
primaryKey: true,
},
user_id: {
type: Sequelize.UUID,
references: {
model: 'users',
key: 'id',
},
allowNull: false,
unique: true,
// onDelete would/could/should be set to cascade here
},
email: {
type: Sequelize.STRING(100),
allowNull: false,
unique: true,
},
});
//创建迁移以将电子邮件表上的外键约束的onDelete设置为“级联”
await queryInterface.removeConstraint('emails', 'emails_user_id_fkey');
await queryInterface.addConstraint('emails', {
fields: ['user_id'],
type: 'foreign key',
name: 'emails_user_id_fkey',
onDelete: 'cascade', // setting onDelete to cascade
references: {
table: 'users',
field: 'id',
},
});
}
嗨,我想我是遇到同样的问题的;我试过上述方法,但没有成功。当您说您在外键中添加了onDelete约束时:您在模型定义中这样做了吗?因此,首先,我在迁移相关表的外键中添加了
onDelete:“cascade”
约束。然后,我将onDelete:“cascade”
添加到模型上的关联中。我应该编辑我的答案