Как обрабатывать слишком длинные имена индексов при миграции Ruby on Rails с помощью MySQL?

Я пытаюсь добавить уникальный индекс, который создается из внешних ключей из четырех связанных таблиц (пользователей, университетов, subject_names, subject_types):

add_index :studies, ["user_id", "university_id", \
          "subject_name_id", "subject_type_id"],
          :unique => true

Ограничение MySQL для имени индекса приводит к остановке миграции. Вот сообщение об ошибке:

Индексное имя 'index_studies_on_user_id_and_university_id_and_subject_name_id_and_subject_type_id' в таблице "исследования" слишком велико; предел составляет 64 символа

Как я могу справиться с этим? Могу ли я использовать псевдоним?

+250
26 мар. '11 в 16:47
источник поделиться
5 ответов

Использование:

add_index :studies, ["user_id", "university_id", \
          "subject_name_id", "subject_type_id"], 
          :unique => true, :name => 'my_index'

Дополнительная информация находится в add_index.

+399
26 мар. '11 в 16:49
источник

Связанные вопросы


Похожие вопросы

Вы также можете изменить имя индекса в определениях столбцов в блоке create_table (например, из генератора миграции).

create_table :studies do |t|
  t.references :user, index: {:name => "index_my_shorter_name"}
end
+98
25 авг. '15 в 17:14
источник

В PostgreSQL предел по умолчанию - 63 символа. Поскольку имена индексов должны быть уникальными, приятно иметь небольшое соглашение. Я использую (я объяснил пример, чтобы объяснить более сложные конструкции):

def change
  add_index :studies, [:professor_id, :user_id], name: :idx_study_professor_user
end

Нормальный индекс был бы:

:index_studies_on_professor_id_and_user_id

Логика будет:

  • index становится idx
  • Имя отдельной таблицы
  • Не присоединяется к словам
  • Нет _id
  • Алфавитный порядок

Что обычно выполняет задание.

+21
26 мая '15 в 9:23
источник

Вы также можете сделать

t.index([:branch_id, :party_id], unique: true, name: 'by_branch_party')

как в Ruby on Rails API.

+11
15 сент. '14 в 14:43
источник

Как и в предыдущем ответе: просто используйте ключ "name" с вашей обычной линией add_index:

def change
  add_index :studies, :user_id, name: 'my_index'
end
+3
08 сент. '14 в 10:42
источник

Посмотрите другие вопросы по меткам или Задайте вопрос