哇!这个问题让我有几根头发变成灰色了。我正在使用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模块。 我假设像gin和gist这样的功能已经启用了。 我从来没有注意到,但是模块显示在您的schema.rb文件中。 它们会像这样出现在顶部
ActiveRecord::Schema.define(version: 20151203234708) do
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
这里是一个Postgres模块列表
add_index:products,:data,using::gin
会引发异常。 - BillPG::UndefinedObject: ERROR: data type character varying has no default operator class for access method "gin"
,并且这是在 Rails 4.2 上发生的。 - King'ori Mainaexecute("CREATE INDEX some_name ON products USING gin(to_tsvector('english', 'data'))")
- panmariopclass
参数来使用默认的操作符类并避免该错误:add_index :products, :data, using: :gin, opclass: :gin_trgm_ops
。详见https://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/SchemaStatements.html#method-i-add_index。 - Scott Bartellenable_extension "btree_gin"
。 - Haseeb A