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

13
我正在尝试在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个回答

17

在Stack Overflow上搜索时发现了这里的答案。不知道为什么它没有出现在我的任何谷歌搜索结果中。如果其他人使用相同的词汇进行搜索,则在此处保留问题。

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

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

2
注意:您必须使用PostgreSQL 9.1才能使其正常工作。要从旧版本升级,请执行以下操作:dev(https://gist.github.com/2883249),prod(https://devcenter.heroku.com/articles/upgrading-postgres-versions) - jfeust
2
您可以通过在 Heroku Postgres 上运行 echo 'show extwlist.extensions' | heroku pg:psql 命令来获取可用扩展的完整列表。详情请参阅 https://devcenter.heroku.com/articles/heroku-postgres-extensions-postgis-full-text-search。 - GregB

7
在较新版本的Rails中,只需执行以下操作即可:
def change
  enable_extension "fuzzystrmatch"
  enable_extension "pg_trgm"
end

如果你需要编写updown方法,那么对应于enable_extension的方法是disable_extension

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接