要在顺序迁移中创建唯一索引,我们可以执行以下操作,
await queryInterface.addIndex(SCHOOL_TABLE, {
fields: ['name', 'school_id'],
unique: true,
name: SCHOOL_NAME_ID_UNIQUE_INDEX,
where: {
is_deleted: false
},
transaction,
})
问题是,由于区分大小写,它允许重复。
在这里的文档中,提到fields
应该是an array of attributes
。
如何将lower()
应用于name
字段,使其不区分大小写?
我现在正在使用一种变通方法,使用原始查询。我认为addIndex()
不支持在fields
上使用函数。
await queryInterface.sequelize.query(`CREATE UNIQUE INDEX IF NOT EXISTS ${SCHOOL_NAME_ID_UNIQUE_INDEX}
ON ${SCHEMA}.schools USING btree (lower(name), school_id) where is_deleted = false;
`, { transaction});