Rails и Postgres Hstore: можете ли вы добавить индекс в перенос?

У меня есть миграция, где я создаю таблицу продуктов таким образом

class CreateProducts < ActiveRecord::Migration
  def change
    create_table :products do |t|
      t.string :name
      t.hstore :data

      t.timestamps
    end
  end
end

На странице activerecord-postgres-hstore они добавляют индекс к таблице (в SQL) с

CREATE INDEX products_gin_data ON products USING GIN(data);

Однако это изменение не отслеживается миграциями (я предполагаю, потому что он специфичен Postgres?), есть ли способ создать индекс из миграции?

спасибо!

Ответ 1

Да! Вы можете выполнить другую миграцию и использовать метод "выполнить"... например:

class IndexProductsGinData < ActiveRecord::Migration
  def up
    execute "CREATE INDEX products_gin_data ON products USING GIN(data)"
  end

  def down
    execute "DROP INDEX products_gin_data"
  end
end

UPDATE:. Вы также можете указать эту строку в config/application.rb:

config.active_record.schema_format = :sql

Вы можете прочитать об этом здесь: http://apidock.com/rails/ActiveRecord/Base/schema_format/class

Ответ 2

В Rails 4 вы можете сделать что-то вроде этого при миграции:

    add_index :products, :data, using: :gin