OperationalError: курсор "_django_curs_ <id>" не существует - PullRequest
0 голосов
/ 28 августа 2018

У нас есть веб-приложение интернет-магазина, работающее на django, postgresql и heroku.

Для конкретной кампании (вы можете думать, что кампания похожа на продукт для покупки), мы успешно продали 10 000 копий. Тем не менее, согласно нашим отчетам Sentry, некоторые из наших пользователей сталкивались с этой ошибкой. Общая спецификация этих пользователей: Ни один из них не имеет адресной информации перед покупкой. Как правило, пользователи заполняют адресную форму сразу после регистрации. Если они этого не делают, они должны заполнить форму при покупке продукта и отправить их вместе.

Вот как выглядит трассировка:

OperationalError: cursor "_django_curs_140398688327424_146" does not exist

(66 additional frame(s) were not displayed)
...
  File "store/apps/store_main/templatetags/store_form_filters.py", line 31, in render_form
    return render_to_string('widgets/store_form_renderer.html', ctx)
  File "store/apps/store_main/templatetags/store_form_filters.py", line 20, in render_widget
    return render_to_string('widgets/store_widget_renderer.html', ctx)
  File "store/apps/store_main/widgets.py", line 40, in render
    attrs=attrs) + "<span class='js-select-support select-arrow'></span><div class='js-select-support select-arrow-space'><b></b></div>"

OperationalError: cursor "_django_curs_140398688327424_146" does not exist 

Итак, еще одна странная вещь - сообщения об исключениях между SQL-запросами до сбоя. Вы можете увидеть это на изображении ниже:

Exception while resolving variable

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

Мы спросили Heroku о проблеме, поскольку они размещают postgres, но они также не имеют никакой подсказки.

Я знаю, что формальная причина этой ошибки - попытка добраться до курсора после коммита. Так как он уничтожается после транзакции, попытка достичь его вызывает эту ошибку, но я не вижу этого в нашем сценарии. Мы никак не касаемся курсора. Что мне не хватает? Что может вызвать эту ошибку? Как это предотвратить? Любые идеи будут оценены.

1 Ответ

0 голосов
/ 29 апреля 2019

Причиной вашей ошибки может быть то, что вы добавили поля в модель и забыли выполнить миграции и миграцию.

Посмотрите на этот ответ: При выполнении тестовых случаев я получу эту ошибку: psycopg2.OperationalError: курсор "_django_curs_140351416325888_23" не существует

...