![](/img/trans.png)
[英]How do I make a column unique and index it in a Ruby on Rails migration?
[英]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”的錯誤。
為了消除唯一的約束,我嘗試了:
remove_index :courses, :name
(遷移成功,但是稍后出現相同的錯誤,表明仍然存在唯一性約束)
execute "ALTER TABLE courses DROP CONSTRAINT unique_index_courses_on_name"
execute "ALTER TABLE courses DROP CONSTRAINT index_courses_on_name"
execute "ALTER TABLE courses DROP CONSTRAINT unique_name"
execute "ALTER TABLE courses DROP CONSTRAINT name"
execute "ALTER TABLE courses DROP INDEX index_courses_on_name"
execute "ALTER TABLE courses DROP INDEX courses_on_name"
execute "DROP INDEX unique_courses_name"
(PG :: UndefinedObject:錯誤:索引“ unique_courses_name”不存在)
execute "ALTER TABLE courses disable CONSTRAINT unique_courses_name"
(PG :: SyntaxError:錯誤:“ CONSTRAINT”第1行或附近的語法錯誤:ALTER TABLE課程禁用CONSTRAINT unique_courses_name)
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.