我正在使用Django 2.0和postgresql 9.6
我在我的app(文章)中创建并清空了迁移文件,其中包含以下内容以添加unaccent和trigram扩展
# Generated by Django 2.0 on 2018-02-06 22:34
from django.db import migrations
from django.contrib.postgres.operations import UnaccentExtension, TrigramExtension
class Migration(migrations.Migration):
dependencies = [
('articles', '0012_auto_20180205_2234'),
]
operations = [
UnaccentExtension(),
TrigramExtension()
]
然后我尝试运行以下查询:
from django.contrib.postgres.search import SearchQuery, SearchRank, SearchVector
vector = SearchVector('title',config='unaccent', weight='A') + SearchVector('description',config='unaccent', weight='B')
query = SearchQuery('india')
Article.objects.annotate(rank=SearchRank(vector, query)).filter(rank__gte=0.3).order_by('rank')
ProgrammingError: text search configuration "unaccent" does not exist
LINE 1: ...rticle"."qa_bool", ts_rank((setweight(to_tsvector('unaccent'...
答案 0 :(得分:0)
我认为您的迁移文件尚未在您的数据库中创建指定的PostgreSQL扩展名。
也许您的数据库用户没有超级用户权限。
Django文档在Creating extension using migrations部分中解释了它:
创建扩展需要具有超级用户权限的数据库用户。如果Django数据库用户没有超级用户权限,则必须使用具有相应权限的用户在Django迁移之外创建扩展。在这种情况下,连接到Django数据库并运行查询
CREATE EXTENSION IF NOT EXISTS hstore;
我再次阅读您的代码,我认为问题是config='unaccent'
您无法使用unaccent
作为配置,但您必须传递一种语言(es:' italian&# 39;)或'简单'