如何通过迁移向已存在的索引添加“唯一”约束

时间:2013-12-09 09:26:12

标签: ruby-on-rails postgresql

如何在Rails数据库中为已存在的索引添加unique: true约束?

我尝试通过

进行迁移
  def change
    add_index :editabilities, [:user_id, :list_id], unique: true
  end

但是迁移失败并出现这样的错误。

  

表上的索引名称“index_editabilities_on_user_id_and_list_id”   'editabilities'已经存在

我正在使用rails4和postgresql。

2 个答案:

答案 0 :(得分:82)

删除旧索引并使用新约束添加它:

def change
  remove_index :editabilities, [:user_id, :list_id]
  add_index :editabilities, [:user_id, :list_id], unique: true
end

答案 1 :(得分:-3)

使用add_index_options更快捷的方式:

def change
  add_index_options :editabilities, [:user_id, :list_id], unique: true
end