簡體   English   中英

如何在Rails遷移中逆轉Postgresql唯一索引約束?

[英]How do I reverse a Postgresql unique index constraint in a rails migration?

我在模型上創建了一個唯一索引,如下所示:

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

我不再要求名稱唯一。 我認為我和這個人有同樣的問題,因此我通過這些建議無濟於事。

我收到類似“ ActiveRecord :: RecordNotUnique:PG :: UniqueViolation:錯誤:我嘗試添加具有相同名稱的記錄時,重復鍵值違反唯一約束” 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"

(PG :: UndefinedObject:錯誤:索引“ unique_courses_name”不存在)

  1. execute "ALTER TABLE courses disable CONSTRAINT unique_courses_name"

(PG :: SyntaxError:錯誤:“ CONSTRAINT”第1行或附近的語法錯誤:ALTER TABLE課程禁用CONSTRAINT unique_courses_name)

  1. execute "ALTER TABLE courses DROP INDEX unique_courses_name"

我使用的是psql 9.4.4,Rails 4.2,以及我的最后一點理智。 感謝大家。

我認為如果您刪除舊索引並再次添加,唯一性將被刪除

class RemoveUniqueFromCoursesName < ActiveRecord::Migration
  def change
    remove_index(:courses, :name)
    add_index(:courses, :name)
  end
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM