在一个正在运行的应用程序中,我正在尝试实现不相关的查询。
pg-gem version 0.21
postgresql version 9.5/9.6
rails version 4
我首先在这里创建/启用扩展名是迁移:
def up
execute 'CREATE EXTENSION IF NOT EXISTS unaccent'
end
def down
execute 'DROP EXTENSION IF EXISTS unaccent'
end
迁移运行良好。 psql \dx
表示扩展程序已启用。
对psql
的一个简单的非常查询表明它正在按预期工作。
当我尝试查询这样的事情时:
people = people.where('unaccent(people.first_name) ILIKE unaccent(?)', "%#{params[:first_name]}%") if params[:first_name].present?
我收到此错误:
PG::UndefinedFunction: ERROR: function unaccent(character varying) does not exist
起初我以为连接是在错误的数据库中进行的,因为我玩了很多版本,但在确定不是这种情况之后,错误仍然存在。
完全确定我也在测试服务器上测试它,结果出现同样的错误。
由于数据库级别的一切似乎都很好,我怀疑轨道上的东西,但我不知道如何进一步调查。
欢迎任何帮助/建议!
答案 0 :(得分:3)
运行对我有用的新迁移
class AddUnaccent < ActiveRecord::Migration[6.0]
def change
enable_extension "unaccent"
end
end
然后在查询中
Store.where('unaccent(name) ILIKE unaccent(?)', "%#{term}%")
答案 1 :(得分:1)
扩展名必须是在不在rails应用程序search_path
的架构中创建的。
最好的解决方案是拥有一个common
模式(或者可能使用现有的public
模式),其中包含所有模式共有的对象。然后在该架构中安装扩展。