Как исправить "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