Класс оператора "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(),
    ...
]
Вернуться на верх