首页 > 解决方案 > 提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。TrigramSimilarity Django

问题描述

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

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

但它给了我一个错误

psycopg2.ProgrammingError:函数相似度(字符变化,未知)不存在第 1 行:...others_2", "blog_mod", SIMILARITY... ^ 提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。

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

标签: pythondjangopython-3.xpostgresql

解决方案


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


推荐阅读