Вопрос по postgresql, ruby-on-rails, migration – Rails и Postgres Hstore: Можете ли вы добавить индекс в миграцию?

12

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

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?), Есть ли способ создать индекс из миграции?

Спасибо!

Ваш Ответ

2   ответа
15

.. например, так:

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

ОБНОВИТЬ Вы также можете указать эту строку в config / application.rb:

config.active_record.schema_format = :sql

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

Отлично, спасибо за совет поconfig.active_record.schema_format kreek
Кроме того, вы можете захотеть сделать это: СОЗДАЙТЕ ИНДЕКС СОСТОЯНИЯ products_gin_data В случае продуктов, использующих GIN (данные), это позволит ему не блокировать таблицу при добавлении индекса. CraigKerstiens
Вы также можете использовать одновременно на капле. Cymen
27

    add_index :products, :data, using: :gin
Это не генерирует GIN (данные). Может быть ошибка в генераторе. Autodidact
дайте мне это в своей структуре.sql (Rails 4.0.2): CREATE INDEX index_products_on_data ПО продуктам, использующим джин (данные); mountriv99

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