我需要删除列上的现有外键约束,并添加一个同名的新约束,该约束引用另一个表的主键。
我得到了一个错误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;
}
}
2条答案
按热度按时间i1icjdpr1#
此处的文档显示,options应该是
addConstraint
函数的第二个参数。https://sequelize.org/master/class/lib/dialects/abstract/query-interface.js~QueryInterface.html#instance-method-addConstraintxzv2uavs2#
如果你使用的是Sequelize第6版,你需要在引用中定义字段/列。参见下面的例子。
在子表中添加约束后,运行sequelize db:migrate,它成功了!希望它能有所帮助。