Действительно ли возможно добавить функциональный агностический базой данных индекс через миграцию Rails/ActiveRecord?

У меня есть модель ActiveRecord как это:

create_table "books" do |t|
  t.string "title"
end

class Book < ActiveRecord::Base
  default_scope :order => 'lower(title) DESC'
end

Поскольку Вы видите, что я хочу отсортировать по строчной форме title атрибут, но это налагает производительность, нападает на уровень базы данных. Этот хит может быть исправлен по-разному с различными базами данных. Например, в PostgreSQL или Oracle Вы создаете функциональный индекс:

CREATE INDEX lowercase_book_title_index ON book (lower(title));

SQLite3 не имеет функциональных индексов, таким образом, необходимо указать сопоставление:

CREATE INDEX lowercase_book_title_index ON book (title COLLATE NOCASE);

Я не изучил, как Вы делаете это с MySQL, но я уверен, что существует путь (сопоставления? виртуальные столбцы?).

В любом случае я хотел бы сделать это надлежащим способом направляющих с агностической базой данных миграцией. Я могу, конечно, создать простой индекс как это:

add_index :books, :title

Но индекс, который это генерирует, чувствителен к регистру. Я понимаю, что мог записать зависимую от базы данных миграцию, но это не очень изящно. Это также не практично - я часто использую SQLite3 на своих рабочих станциях разработки и PostgreSQL в производстве. Доступные варианты для add_index имеют дело с именем индекса, уникальностью и длиной. Я пропускаю способ выполнить то, что я пытаюсь сделать здесь?

10
задан Sven 3 August 2010 в 15:33
поделиться