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,因为其他对象依赖它
  • 在创建用户表的迁移中的id类型初始化中包括
    {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”
    添加到模型上的关联中。我应该编辑我的答案