当前位置: 首页 > 知识库问答 >
问题:

提示:没有与给定名称和参数类型匹配的函数。您可能需要添加显式类型转换。三角洲

强硕
2023-03-14

我正在尝试使用TrigramSimilarity进行全文搜索。我在PostgreSQL中激活了pg\u trgm扩展。并添加了django。contrib。我安装的应用程序中的postgres。但当我尝试查询时

blog.objects.annotate(similarity=TrigramSimilarity('name', 'abc'),).filter(similarity__gt=0.3).order_by('-similarity')

但它给了我一个错误

psycopg2。编程错误:函数相似性(字符变化,未知)不存在第1行:。。。其他“\u 2”,“blog\u mod”,相似性…^提示:没有函数与给定的名称和参数类型匹配。您可能需要添加显式类型转换。

为什么会发生此错误。请帮帮我。

共有3个答案

程振濂
2023-03-14

因为(我不知道为什么?)相反,它将与字符串一起工作,或者与SearchVectorField都不工作,而是使用常规字段。

卫沈义
2023-03-14

如果pg_trgm扩展是在公共模式中创建的,那么可以在另一个模式中获得错误。这对我很有用:

select public.similarity('foo','bar');

然而,如果我尝试Szymon的解决方案,Postgres告诉我扩展已经存在。我还没找到留档。

桂志诚
2023-03-14

错误表示扩展尚未安装。我不知道为什么会这样。可能您没有在用于django的数据库中安装扩展?

可以从django代码执行原始sql查询。这将确保您以正确的数据库/架构为目标。

from django.db import connection
with connection.cursor() as cursor:
    cursor.execute('CREATE EXTENSION IF NOT EXISTS pg_trgm')

您还可以使用Django的自定义TrigramExtension迁移。创建扩展查询是相同的。但是,如果您在同样需要启用pg_trgm的测试数据库上运行集成测试,那么迁移是一个好主意。

https://docs.djangoproject.com/en/2.1/ref/contrib/postgres/operations/#database-迁移操作

 类似资料: