在Rails中可以这样做:
add_index :table, :column_name, :using => 'btree'
在带有PGSQL的Rails 4中是否可以添加GIN
或GiST
索引,如:
add_index :students, :name, :using => 'gin'
或者我是否使用手动执行语句?这背后的概念是我想保留schema.rb而不是使用structure.sql
答案 0 :(得分:40)
在Rails 4中,您现在可以在迁移中执行以下操作:
add_index :products, :data, using: :gin
答案 1 :(得分:23)
哇!我有一些头发变灰了。我正在使用rails 4.2并尝试运行此迁移,它给了我与上面的人相同的错误。
PG::UndefinedObject: ERROR: data type character varying has no default
我发现你实际上仍然可以继续使用schema.rb而不必使用config / application.rb
config.active_record.schema_format = :sql
我缺少的一件主要事情是安装postgres contrib模块。我假设杜松子酒和吉斯特之类的功能已经打开了。我从来没有注意到,但是schema.rb文件中显示了模块。它们像这样出现在顶部
ActiveRecord::Schema.define(version: 20151203234708) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
enable_extension "pg_trgm"
enable_extension "fuzzystrmatch"
enable_extension "btree_gin"
enable_extension "btree_gist"
如果您没有看到启用btree_gin,则无法使用代码
add_index :products, :data, using: :gin
您可以通过运行这样的迁移来安装任何模块。更改将反映在schema.rb
中class InstallSomeContribPackages < ActiveRecord::Migration
def up
execute "CREATE EXTENSION IF NOT EXISTS btree_gin;"
execute "CREATE EXTENSION IF NOT EXISTS btree_gist;"
end
def down
execute "DROP EXTENSION IF EXISTS btree_gin;"
execute "DROP EXTENSION IF EXISTS btree_gist;"
end
end
的列表