13

我正在尝试在 Heroku 上的新 Postgres 9 共享数据库中使用 contrib 模块。更具体地说,pg_trgmfuzzystrmatch模块。在文档中它说

此外,还有许多免费的扩展可用,例如fuzzystrmatch、pg_trgm 和unaccent。

我似乎找不到任何关于如何在共享 Heroku 数据库上实际启用这些模块的文档。请参阅下面的答案。

笔记:

我尝试通过连接到数据库来添加它们

heroku pg:psql HEROKU_POSTGRESQL_BROWN

并运行

create extension pg_trgm
create extension fuzzystrmatch

但在尝试使用它之后

SELECT levenshtein('tests', 'test');

它仍然说

ERROR:  function levenshtein(unknown, unknown) does not existLINE 1: SELECT levenshtein('tests', 'test');
               ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.

有人知道为什么会这样吗?

4

2 回答 2

17

在搜索 Stack Overflow 时在这里找到了答案。不知道为什么它没有出现在我的任何 Google 搜索中。如果其他人使用相同的措辞来搜索这个问题,将把问题留在这里。

要启用模块,您需要将它们添加到迁移中,如下所示:

def up
  execute "create extension fuzzystrmatch"
  execute "create extension pg_trgm"
end
于 2012-05-25T10:17:53.700 回答
7

在较新版本的 Rails 中,这样做就足够了:

def change
  enable_extension "fuzzystrmatch"
  enable_extension "pg_trgm"
end

如果需要写upanddown方法,对应的方法enable_extension就是disable_extension.

于 2014-05-06T03:06:52.800 回答