Rails和Postgres Hstore:你能在迁移中添加索引吗?

时间:2012-05-14 23:11:56

标签: ruby-on-rails postgresql indexing migration 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 page上,他们使用

为表添加索引(在SQL中)
CREATE INDEX products_gin_data ON products USING GIN(data);

然而,迁移并未跟踪此更改(我猜是因为它是Postgres特定的?),有没有办法从迁移中创建索引?

谢谢!

2 个答案:

答案 0 :(得分:27)

在Rails 4中,您现在可以在迁移中执行以下操作:

    add_index :products, :data, using: :gin

答案 1 :(得分: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/class