我有一次迁徙:
class AddGinIndexToContacts < ActiveRecord::Migration
def up
execute("CREATE INDEX contacts_search_idx ON contacts USING gin (first_name gin_trgm_ops, last_name gin_trgm_ops, name gin_trgm_ops)")
end
def down
execute("DROP INDEX contacts_search_idx")
end
end它在schema.rb中生成这段代码
add_index "contacts", ["first_name", "last_name", "name"], name: "contacts_search_idx", using: :gin稍后,当我执行rake db:schema:load时,它会生成错误的sql:
CREATE INDEX "contacts_search_idx" ON "contacts" USING gin ("first_name", "last_name", "name")第一,它说:
错误:数据类型字符变化没有访问方法"gin“的默认运算符类。
第二,有丢失的gin_trgm_ops。
怎么让它起作用?
Rails 4.2
发布于 2015-04-15 19:18:49
您可以使用order定义运算符类。
add_index "contacts", ["first_name", "last_name", "name"], name: "contacts_search_idx", using: :gin, order: {first_name: :gin_trgm_ops, last_name: :gin_trgm_ops, name: :gin_trgm_ops}在这里找到了这个解决方案:index#1553-Adding-index-with-other-operator-classes-PostgreSQL-
发布于 2018-06-15 11:20:57
现在您可以使用opclass选项:
add_index :contacts, [:first_name, :last_name, :name], name: "contacts_search_idx", using: :gin, opclass: { first_name: :gin_trgm_ops, last_name: :gin_trgm_ops, name: :gin_trgm_ops }发布于 2015-04-17 12:18:34
不幸的是,除非架构更改为sql,否则无法解决这一问题。几个链接:
Rails and Postgres Hstore: Can you add an index in a migration?
index using 'gin' create a 'btree' index instead?
一旦我将模式格式更改为sql,它就可以正常工作了。
https://stackoverflow.com/questions/29098712
复制相似问题