无法使postgres unaccent扩展工作在rails上

时间:2018-03-09 14:03:20

标签: ruby-on-rails postgresql ruby-on-rails-4

在一个正在运行的应用程序中,我正在尝试实现不相关的查询。

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

起初我以为连接是在错误的数据库中进行的,因为我玩了很多版本,但在确定不是这种情况之后,错误仍然存​​在。

完全确定我也在测试服务器上测试它,结果出现同样的错误。

由于数据库级别的一切似乎都很好,我怀疑轨道上的东西,但我不知道如何进一步调查。

欢迎任何帮助/建议!

2 个答案:

答案 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模式),其中包含所有模式共有的对象。然后在该架构中安装扩展。