Как отменить ограничение уникального индекса Postgresql при миграции рельсов?

Я создал уникальный индекс для моей модели следующим образом:

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: ERROR: индекс "unique_courses_name" не существует)

  1. execute "ALTER TABLE courses disable CONSTRAINT unique_courses_name"

(PG:: SyntaxError: ERROR: синтаксическая ошибка в или около "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 и моей последней унцией здравомыслия. Спасибо всем.

1 ответ

Я думаю, что уникальный будет удален, если вы удалите старый индекс и добавите его снова

class RemoveUniqueFromCoursesName < ActiveRecord::Migration
  def change
    remove_index(:courses, :name)
    add_index(:courses, :name)
  end
end
Другие вопросы по тегам