2017-02-17 242 views
1

我在我的SQL脚本中使用了levenshtein()函数。我正在使用Postgresql数据库和客户端来执行脚本。它抛出一个错误:错误:函数levenshtein()不存在

function levenshtein(character varying, character varying) does not exist. HINT : No function matches the given name and argument types. You might need to add explicit type casts.

我知道它的常见的解决方案,即创造一个像我已经做了并且奇怪的是,当我在创建fuzzystrmatch扩展同一个脚本运行平稳6天前“fuzzystrmatch”扩展第一名!

下面是我使用levenshtein()的代码行。

as $$select (1.0 - levenshtein($1, $2)::real/greatest(length($1), length($2)))::real;$$; 

回答

2

这个SQL命令将告诉您目前安装的扩展:

SELECT n.nspname 
FROM pg_extension e 
    JOIN pg_namespace n 
     ON e.extnamespace = n.oid 
WHERE e.extname = 'fuzzystrmatch'; 

如果不是你的search_path,您的查询将无法找到该功能。

要在不同的架构扩展,在下面的例子中public,删除并重新创建它:

DROP EXTENSION fuzzystrmatch; 
CREATE EXTENSION fuzzystrmatch SCHEMA public; 
+0

它与超级用户完成。当我创建扩展,它会抛出错误说'扩展fuzzystrmatch已经存在' –

+0

你可以显示上述查询确切的错误消息?另外,哪些数据类型是$ 1和$ 2? –

+0

错误:函数levenshtein(charcater变化,字符变化)不存在(指向我在我的问题中提供的代码行) 提示:没有函数与给定的名称和参数类型匹配。您可能需要添加显式类型转换。 $ 1和$ 2属于varchar类型 –