2015-10-13 66 views
0

我創建了一個獨特的指數上我的模型像這樣:如何在導軌遷移中反轉Postgresql唯一索引約束?

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

我不再需要的姓名是唯一的。我想我有和this person一樣的問題,所以我通過這些建議無濟於事。

我收到這樣的錯誤「的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」 不不存在)

  • execute "ALTER TABLE courses disable CONSTRAINT unique_courses_name"
  • (PG ::語法錯誤:錯誤:在或接近 「約束」 LINE 1語法錯誤:ALTER TABLE課程禁用約束unique_courses_name)

  • execute "ALTER TABLE courses DROP INDEX unique_courses_name"
  • 我在PSQL 9.4.4,Rails的4.2,和我的理智的最後盎司。感謝大家。

    +0

    顯示自'psql',如表定義'\ dt課程' –

    +0

    @craig - 它表示在dev中找不到任何關係,並且無法在生產中找到數據庫連接(我推測是因爲它是到db的URL而不是在Heroku的/ var中)。我要去調查爲什麼我得到這個錯誤,儘管它似乎工作正常。 –

    回答

    0

    我想唯一會被刪除,如果你刪除舊索引,然後重新添加

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

    我同意這個_should_ work,就像我在上面的遷移運行的第一個嘗試中一樣,但數據庫約束仍然存在,使我無法添加具有重複名稱的記錄。我認爲錯誤在我的配置中更深,這只是症狀。 –

    相關問題