OperationalError:游标“ _django_curs_ <id>”不存在

dha*_*gan 5 python django postgresql sentry heroku-postgres

我们有一个在线商店的网络应用程序,由django,postgresql和heroku提供支持。

对于特定的广告系列(您可以考虑购买类似产品的广告系列),我们已经成功售出了1万多本。但是根据我们的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 
Run Code Online (Sandbox Code Playgroud)

因此,另一个奇怪的普遍现象是,失败之前sql查询之间存在异常消息。您可以在下图中看到它:

解决变量时发生异常

如果它们有某种联系,我会添加它。可能还相关的是,收到此错误的用户是在批量发送邮件后立即尝试购买广告系列的用户。因此,大量的流量可能是我们还不确定的原因。

我们问Heroku这个问题,因为他们托管了postgres,但他们也没有任何线索。

我知道此错误的正式原因是尝试在提交后到达游标。由于它是在事务处理后销毁的,因此尝试到达它会导致此错误,但在我们的方案中我看不到此错误。我们没有以任何方式触摸光标。我想念什么?什么会产生此错误?怎么预防呢?任何想法,将不胜感激。

小智 20

您的错误的原因可能是您向模型添加了字段而忘记进行迁移和迁移。

看看这个答案:在运行测试用例时,我会得到这个错误:psycopg2.OperationalError: cursor "_django_curs_140351416325888_23" does not exist


dan*_*vic 7

如果您使用 django-pytest 并启用了优化--reuse-db并在测试运行之间进行了数据库迁移,则需要再次重新创建数据库表。

pytest --create-db
Run Code Online (Sandbox Code Playgroud)