Как отменить ограничение уникального индекса Postgresql при миграции рельсов?
Я создал уникальный индекс для моей модели следующим образом:
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: ERROR: индекс "unique_courses_name" не существует)
execute "ALTER TABLE courses disable CONSTRAINT unique_courses_name"
(PG:: SyntaxError: ERROR: синтаксическая ошибка в или около "CONSTRAINT" ЛИНИЯ 1: курсы ALTER TABLE отключают CONSTRAINT unique_courses_name)
execute "ALTER TABLE courses DROP INDEX unique_courses_name"
Я на psql 9.4.4, Rails 4.2 и моей последней унцией здравомыслия. Спасибо всем.
1 ответ
Я думаю, что уникальный будет удален, если вы удалите старый индекс и добавите его снова
class RemoveUniqueFromCoursesName < ActiveRecord::Migration
def change
remove_index(:courses, :name)
add_index(:courses, :name)
end
end