soe*_*ace 11 javascript sql constraints sequelize.js
我unique
通过migrations.changeColumn函数在迁移中添加约束.
添加约束有效,但由于您需要提供"向后迁移",因此以相同方式删除它不会.向后迁移时不会出现任何错误,但会再次应用向前迁移结果Possibly unhandled SequelizeDatabaseError: relation "myAttribute_unique_idx" already exists
.
(使用过的数据库是postgres)
module.exports = {
up: function (migration, DataTypes, done) {
migration.changeColumn(
'Users',
'myAttribute',
{
type: DataTypes.STRING,
unique: true // ADDING constraint works
}
).done(done);
},
down: function (migration, DataTypes, done) {
migration.changeColumn(
'Users',
'myAttribute',
{
type: DataTypes.STRING,
unique: false // REMOVING does not
}
).done(done);
}
};
Run Code Online (Sandbox Code Playgroud)
我也尝试过使用removeIndex
migration.removeIndex('Users', 'myAttribute_unique_idx').done(done);
Run Code Online (Sandbox Code Playgroud)
但是在还原迁移时会出现以下错误:
Possibly unhandled SequelizeDatabaseError: cannot drop index "myAttribute_unique_idx" because constraint myAttribute_unique_idx on table "Users" requires it
Run Code Online (Sandbox Code Playgroud)
ezp*_*zpn 15
遗憾的是,sequelize没有内置迁移方法来删除约束.这就是为什么在删除密钥之前需要进行原始查询.
down: function (migration, DataTypes) {
migration.sequelize.query(
'ALTER TABLE Users DROP CONSTRAINT myAttribute_unique_idx;'
);
migration.removeIndex('Users', 'myAttribute_unique_idx');
return;
}
Run Code Online (Sandbox Code Playgroud)
removeConstraint()
如果要删除约束,则Sequelize有方法。因此,您可以使用以下内容:
return queryInterface.removeConstraint('users', 'users_userId_key', {})
这里users
是我的表名,users_userId_key
是索引或约束名称,attributename_unique_key
如果您要删除(例如说)有唯一的约束,则通常采用这种形式。
小智 5
如果要删除索引,则应使用:
down: function (migration, DataTypes) {
return migration.removeIndex('Users', 'myAttribute_unique_idx');
}
Run Code Online (Sandbox Code Playgroud)
返回用于使用promise样式而不是回调.这是sequelize推荐的.
如下所述,自己处理索引的创建也是一件好事:http: //sequelize.readthedocs.org/en/latest/docs/migrations/#addindextablename-attributes-options
归档时间: |
|
查看次数: |
13596 次 |
最近记录: |