如何在rails迁移中撤消Postgresql唯一索引约束?

时间:2015-10-13 07:30:48

标签: ruby-on-rails postgresql rails-migrations

我在我的模型上创建了一个独特的索引,如下所示:

add_index(:courses, :name, unique: true)

我不再要求名称是唯一的。我认为我和this person有同样的问题,所以我通过这些建议无济于事。

当我尝试添加具有相同名称的记录时,我收到类似“ActiveRecord :: RecordNotUnique:PG :: UniqueViolation:ERROR:重复键值违反唯一约束”index_courses_on_name“的错误。

删除我尝试的唯一约束:

  1. remove_index :courses, :name

    (迁移成功,但后来我得到同样的错误,表明仍存在唯一性限制)

  2. execute "ALTER TABLE courses DROP CONSTRAINT unique_index_courses_on_name"
  3. execute "ALTER TABLE courses DROP CONSTRAINT index_courses_on_name"
  4. execute "ALTER TABLE courses DROP CONSTRAINT unique_name"
  5. execute "ALTER TABLE courses DROP CONSTRAINT name"
  6. execute "ALTER TABLE courses DROP INDEX index_courses_on_name"
  7. execute "ALTER TABLE courses DROP INDEX courses_on_name"
  8. execute "DROP INDEX unique_courses_name"
  9. (PG :: UndefinedObject:错误:索引“unique_courses_name”不存在)

    1. execute "ALTER TABLE courses disable CONSTRAINT unique_courses_name"
    2. (PG :: SyntaxError:ERROR:“CONSTRAINT”或其附近的语法错误 第1行:ALTER TABLE课程禁用CONSTRAINT unique_courses_name)

      1. execute "ALTER TABLE courses DROP INDEX unique_courses_name"
      2. 我正在使用psql 9.4.4,Rails 4.2,以及我的最后一点理智。感谢大家。

1 个答案:

答案 0 :(得分:0)

如果删除旧索引并再次添加

,我认为将删除唯一身份
class RemoveUniqueFromCoursesName < ActiveRecord::Migration
  def change
    remove_index(:courses, :name)
    add_index(:courses, :name)
  end
end