我正在尝试在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.
有人知道为什么会这样吗?
答案 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
如果您需要撰写up
和down
方法,则enable_extension
的相应方法为disable_extension
。