postgresql 顺序迁移-添加外键约束问题

y3bcpkx1  于 2022-11-04  发布在  PostgreSQL
关注(0)|答案(2)|浏览(154)

我需要删除列上的现有外键约束,并添加一个同名的新约束,该约束引用另一个表的主键。
我得到了一个错误ERROR: Constraint type must be specified through options.type。虽然我在选项的对象中提供了约束类型作为第三个参数。
以下是迁移代码,供参考。

async up(queryInterface, Sequelize){
    const transaction = await queryInterface.sequelize.transaction();
    try {
      await queryInterface.removeConstraint(
        'shipments',
        'shipments_status_id_fkey',
        { transaction }
      );
      await queryInterface.addConstraint(
        'shipments',
        'status_id',
        {
          type: 'foreign key',
          name: 'shipments_status_id_fkey',
          references: {
            table: 'statuses',
            field: 'id'
          },
          transaction
        }
      );
      await transaction.commit();
    } catch (err) {
      await transaction.rollback();
      throw err;
    }
  }
i1icjdpr

i1icjdpr1#

此处的文档显示,options应该是addConstraint函数的第二个参数。https://sequelize.org/master/class/lib/dialects/abstract/query-interface.js~QueryInterface.html#instance-method-addConstraint

await queryInterface.addConstraint(
        'shipments',
        {
          type: 'foreign key',
          fields: ['status_id']
          name: 'shipments_status_id_fkey',
          references: {
            table: 'statuses',
            field: 'id'
          },
          transaction
        }
      );
xzv2uavs

xzv2uavs2#

如果你使用的是Sequelize第6版,你需要在引用中定义字段/列。参见下面的例子。

await queryInterface.addConstraint(TableName, {
      fields: ["FIELD_NAME_OF_THE_FOREIGN_KEY"],
      type: "foreign key",
      name: "YOUR_FOREIGN_KEY_NAME",
      references: {
        table: "REFERENCE_TABLE",
        fields: ["PRIMARY_KEY_OF_THE_REFERENCE_TABLE"],
        key: "PRIMARY_KEY_OF_THE_REFERENCE_TABLE",
      },
    });

在子表中添加约束后,运行sequelize db:migrate,它成功了!希望它能有所帮助。

相关问题