Используйте Rails Migrations для удаления индекса, не зная его имени - PullRequest
8 голосов
/ 26 августа 2009

У меня есть таблица с составным индексом, которая не была создана при миграции рельсов. Теперь мне нужно создать миграцию rails, которая удалит этот индекс и создаст новый, но я не обязательно знаю, каким будет имя индекса.

Я знаю, что на шаге миграции можно получить список имен таблиц и столбцов. Можно ли получить список имен индексов для конкретной таблицы? Или, глядя на это по-другому, возможно ли удалить все индексы в таблице? Или это единственный вариант написать собственные SQL-запросы к базе данных, чтобы получить эту информацию?

Ответы [ 3 ]

10 голосов
/ 27 августа 2009

Вы можете получить подробную информацию обо всех индексах в таблице с помощью:

ActiveRecord::Base.connection.indexes('tablename')

Возвращает массив объектов ActiveRecord::ConnectionAdapters::IndexDefinition, каждый из которых имеет метод #name и #columns.

3 голосов
/ 06 декабря 2014

Чтобы развернуть отличный ответ @ showaltb, вот полная миграция для удаления всех индексов таблицы, не зная их имен:

ActiveRecord::Base.connection.indexes('tablename').each do |index|
  remove_index 'tablename', name: index.name
end
1 голос
/ 26 августа 2009

Вы можете получить информацию непосредственно из базы данных. Если вы используете MySQL:

>> select TABLE_NAME, INDEX_NAME from information_schema.statistics WHERE TABLE_SCHEMA = 'your_database_name';

Вам нужно только заменить бит your_database_name . Вам понадобятся привилегии для базы данных information_schema (или вы войдете в систему как root).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...