Как исправить "InternalError: переменная не найдена в списке целей подплана"

У меня есть старый проект Django (django-1.1.29) и несколько тестов в pytest (pytest-4.3.0), все запущено в Docker. База данных - PostgreSQL 10 и является сервисом docker-compose, от которого зависит приложение. Версия python - 2.7.18.

В последнее время тесты начали сбоить со странной ошибкой:

InternalError: variable not found in subplan target list.

Ошибка возникает только тогда, когда я подсчитываю количество объектов определенной модели, например Problem.objects.count(). Инструкция превращается в следующий запрос

(0.000) SELECT COUNT(*) AS "__count" FROM "problems_problem"; args=() от Django.

Весь журнал находится здесь:

Я буду очень признателен, если кто-нибудь поможет мне решить эту проблему или хотя бы подскажет, где искать причины.

Вот что я пытался сделать до сих пор, но ничего из этого не помогло:

  • Используйте различные версии PostgreSQL (10, 11, 12, 13)
  • Отключить курсор на стороне сервера

Похоже, что postgres поставляет что-то сломанное во все свои минорные версии:

https://www.postgresql.org/message-id/2121219.1644607692%40sss.pgh.pa.us

Например, postgres:12 dockerhub теперь соответствует образу postgres:12.10 dockerhub, а не 12.9. Если вы явно укажете postgres:12.9 (или предыдущий минорный релиз для любой другой версии), я полагаю, он начнет работать.

У меня была такая же проблема. Временное решение, но я изменил запрос, выполняемый администратором.

Попробуйте это в своем файле admin.py

class ProblemAdmin(admin.ModelAdmin):
    def get_queryset(self, request):
        return Problem.objects.filter(id__gte=0)

Редактирование: Это только исправляет проблемы, которые вы можете иметь с вашим администратором django

Вернуться на верх