Rails添加email唯一索引报重复键名错误如何不删库保留数据解决
错误原因
你在创建users表时已经为email字段创建了普通索引,默认索引名就是index_users_on_email。Rails默认给add_index生成的索引名规则也是index_表名_on_字段名,因此执行新迁移时会触发索引名重复报错。
可行解决方案
方案1(推荐):删除原有普通索引后添加唯一索引
修改你的迁移文件代码如下,操作仅涉及索引变更,不会影响现有数据,也无需回滚历史迁移、修改库表结构,同时只会保留一个唯一索引节省存储空间:
class AddUniqueIndexForUsersOnEmail < ActiveRecord::Migration[6.1] def change # 先删除已存在的普通索引 remove_index :users, name: 'index_users_on_email' # 再添加唯一索引 add_index :users, :email, unique: true end end
注意:执行迁移前请先清理
users表中
额外提示:你原迁移类名里的Enail是拼写错误,建议修正为
方案2(不推荐):为唯一索引指定自定义名称避免重名
如果你因特殊原因需要保留原有普通索引,可以给新的唯一索引自定义名称,避开重复名即可:
class AddUniqueIndexForUsersOnEmail < ActiveRecord::Migration[6.1] def change add_index :users, :email, unique: true, name: 'unique_index_users_on_email' end end
该方案会在
内容的提问来源于stack exchange,提问作者Pirikara
相关产品推荐
相关产品推荐

