Класс оператора "gin_trgm_ops" не существует для метода доступа "gin"
psycopg2.errors.UndefinedObject: operator class "gin_trgm_ops" does not exist for access method "gin"
Всем привет, вот все сообщение, когда я пытаюсь запустить pytest на моем проекте, который написан на Python/Django + db это postgresql и все это сидит внутри docker.
Я собираю проект на docker с шаблоном django-cookiecutter, все настройки по умолчанию. Я поместил индекс gin в одно из моих строковых полей, миграции проходят успешно, pg_trgm
extention создается успешно, но если я попытаюсь протестировать проект с помощью pytest, я получу эту ошибку.
Вот моя pytest.ini
[pytest]
DJANGO_SETTINGS_MODULE = config.settings.test
Вот конфигурация базы данных в моем тестовом файле настроек: test.py
DATABASES['test'] = { # noqa
'ENGINE': 'django.contrib.gis.db.backends.postgis',
'NAME': 'test',
'PASSWORD': 'test',
'USER': 'test',
'HOST': 'localhost',
'PORT': 5454,
}
Это часть миграции, которая создает расширение pg_trgm
и помещает индекс в указанное поле
migrations.AddIndex(
model_name='<model_name>',
index=django.contrib.postgres.indexes.GinIndex(fields=['field_name'], name='field_name_gin_idx', opclasses=['gin_trgm_ops']),
),
А вот весь трассировочный бэкграунд, который я получаю:
Я хочу запускать тесты с помощью pytest и получил эту проблему, которая на самом деле не вызывает никаких проблем, пока проект работает, gin index действительно работает. Но только когда я запускаю тест, неважно, django's manage.py test
или pytest
, он проваливается с ошибкой выше. Если я закомментирую часть миграции, которая должна генерировать индекс, то она работает.
Попробуйте добавить в миграцию:
from django.contrib.postgres.operations import TrigramExtension
operations = [
TrigramExtension(),
...
]