如何在Heroku Postgres数据库上启用contrib模块

时间:2012-05-25 10:07:45

标签: ruby-on-rails postgresql heroku

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

  

此外,还提供许多免费扩展程序,例如   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.

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

2 个答案:

答案 0 :(得分:16)

在搜索Stack Overflow时找到答案here。不知道为什么我的Google搜索没有出现。如果其他人使用相同的措辞来搜索这个问题,那么就在这里留下问题。

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

def up
  execute "create extension fuzzystrmatch"
  execute "create extension pg_trgm"
end

答案 1 :(得分:7)

在较新版本的Rails中,它应该足够了:

def change
  enable_extension "fuzzystrmatch"
  enable_extension "pg_trgm"
end

如果您需要撰写updown方法,则enable_extension的相应方法为disable_extension