提示:没有函数与给定的名称和参数类型匹配.可能需要添加显式类型强制转换.三元组相似性姜戈



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

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

但它给了我一个错误

心理战2.编程错误:函数相似性(字符变化,未知(不存在 第 1 行:...others_2","blog_mod",相似性... ^ 提示:没有函数与给定的名称和参数类型匹配。可能需要添加显式类型强制转换。

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

该错误指示尚未安装扩展。我不知道为什么会这样。可能您没有在用于 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-migration-operations

这是因为(我不知道为什么?TrigramSimilarity不适用于search_query。相反,它将与字符串一起使用。或者两者都不使用SearchVectorField,而是使用常规字段。

如果在公共架构中创建pg_trgm扩展,则可以在另一个架构中获取错误。这对我有用:

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

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

我有同样的问题。如果在安装此扩展之前未在搜索路径中包含将使用TrigramSimilarity()的架构,则会发生这种情况。

尝试

SET search_path TO my_schema

然后

CREATE EXTENSION IF NOT EXISTS pg_trgm;

我的猜测是您可能没有连接到正确的数据库。

在 Ubuntu 中。尝试。。。

$ sudo su postgres
$ psql <db_name>
<db_name> = Name of DB being used by the Django project.
e.g psql badass_db
$ CREATE EXTENSION pg_trgm;

最新更新