Я нахожусь в ветке git и пытаюсь откинуть две миграции, прежде чем уничтожить ветку. Самый последний перенос добавляет столбец в таблицу, которую я хочу сохранить (и которая является частью мастера, а не ветви, которую нужно удалить), поэтому отбрасывание всей таблицы не является решением (если только я не буду снова воссоздавать его). В любом случае, я, должно быть, сделал что-то не так, потому что когда я попытался удалить столбец apple_id из таблицы оценок, я получил эту ошибку прерывания.Индексное имя слишком длинное для миграции отката
Это миграция, что я пытаюсь откатить
add_column :scores, :apple_id, :integer
Однако сообщение об ошибке (см ниже), со ссылкой на индексы, которые я создал с первоначальной миграции (часть основной ветви), что создание таблицы
add_index :scores, [:user_id, :created_at, :funded, :started]
Можете ли вы предложить, что я могу сделать?
== AddAppleidColumnToScores: reverting =======================================
-- remove_column("scores", :apple_id)
rake aborted!
An error has occurred, this and all later migrations canceled:
Index name 'temp_index_altered_scores_on_user_id_and_created_at_and_funded_and_started' on table 'altered_scores' is too long; the limit is 64 characters
Обновление: чтение этого SO вопрос How do I handle too long index names in a Ruby on Rails migration with MySQL?, я получил больше информации об источнике проблемы, но не знаю, как ее решить. Оба SQL и Postgres имеют 64 ограничения на число символов
Index name 'index_studies_on_user_id_and_university_id_and_subject_\
name_id_and_subject_type_id' on table 'studies' is too long; \
the limit is 64 characters
Принятая ответа на вопрос, который я сослаться на говорит, чтобы дать указателю имя, хотя я не знаю, как я мог бы сделать это теперь, когда я пытаюсь откатить.
add_index :studies, ["user_id", "university_id", \
"subject_name_id", "subject_type_id"],
:unique => true, :name => 'my_index'
Обновление: в ответ на комментарии, я использую Rails 3.2.12. Это миграция, которая добавляет столбец
class AddAppleidColumnToScores < ActiveRecord::Migration
def change
add_column :scores, :apple_id, :integer
end
end
Кроме того, причина, почему я не хочу, чтобы удалить таблицу, что я не был уверен, что проблемы, которые она может вызвать в воссоздании его, так как а) основная часть была созданный мастером ветки, а столбец, добавленный в ветку, и b) Я не знал, что делать с файлом миграции для упавшей таблицы? так как это была четвертая (около 10) таблиц, которые я создал, я не знаю, как ее запустить, и только она снова.
Какую версию Rails вы используете? Я воссоздал проект с нуля с помощью Rails v3.1.0, но откат работает нормально. Я также использую PG v9.0.1. Когда я создаю индекс как 'add_index: score, [: user_id,: created_at,: funded,: started]', имя индекса - 'index_scores_on_user_id_and_created_at_and_funded_and_started'. –
Если вы не хотите сбросить и воссоздать свою базу данных с нуля, я настоятельно рекомендую вам удалить индекс вручную, в консоли db. И можете ли вы вставить здесь полную миграцию «AddAppleIdColumnToScores» и ваш schema.rb перед откатом? –
Вы пытались удалить индекс с помощью чистого SQL? –