django 和 postgres 的间歇性数据库错误:django 有时会尝试查询我几周前删除的数据库

Posted

技术标签:

【中文标题】django 和 postgres 的间歇性数据库错误:django 有时会尝试查询我几周前删除的数据库【英文标题】:Intermittant database error with django and postgres: django sometimes tries to query a database I deleted weeks ago 【发布时间】:2012-01-27 00:21:13 【问题描述】:

我正在 django 中构建一个简单的 Web 应用程序,在开发中使用 sqlite,并在生产中运行 postgres。在我的本地服务器上一切正常,但我在生产端遇到了一个奇怪的错误。

该错误会影响网站的多个部分,但最明显的示例是在管理页面上。有时当我检查 Sentence 表中的条目时,我会收到以下错误:

DatabaseError at /admin/treeLing_app/sentence/

column treeLing_app_sentence.sexp does not exist
LINE 1: ...ce"."comment_id", "treeLing_app_sentence"."text", "treeLing_...
                                                         ^

令人困惑的是,sexp(用于“s-expression”)字段仅包含在数据库设计的早期版本中。代码中没有留下任何痕迹。从那时起,我还删除并重新创建了开发和生产数据库。

底线:我不知道 django/postgres 是如何知道旧的 sexp 字段的。最重要的是,我不明白为什么错误只是偶尔弹出。似乎 django 的 ORM 的魔力出现了严重问题。谁能帮我解开这个谜?

其他一些可能有用的细节:

当错误发生时,它往往会连续发生好几次——就好像数据库进入另一个模式几分钟一样。 在站点的其他部分,该错误的表现方式有所不同。当模板引用句子对象中的字段时,这些字段只是空白。我很难调试这个问题,因为这个问题只在某些时候出现,而且我无法在我的开发机器上复制它。 postgres 是 9.1.1 版;我正在使用 psycopg2。 我正在使用 South。但正如我之前所说,自从问题开始以来,我已经完全删除并重新创建了两个数据库以及所有迁移,所以我怀疑南方是问题所在。 我在 bitnami djangostack 上运行所有这些。不知道为什么会有任何不同,但你永远不知道......

感谢您的帮助!

编辑:一些新信息:经过大量测试,当使用 django 的 ./manage.py runserver 命令时,我无法在生产服务器上复制错误——错误似乎只是在使用 apache/wsgi 服务器时发生。

这似乎缩小了问题的范围。有什么建议可以进一步追踪吗?

【问题讨论】:

【参考方案1】:

如果所有 South 迁移都已成功应用(您没有 --fake 任何一个,是吗?),我想您可能有一个已编译的 .pyc 文件从模型的旧状态遗留下来。在项目根目录尝试以下操作:

find . -name "*.pyc" -delete

【讨论】:

我做了 --fake 生产端的迁移之一。但那是在彻底清除(开发和生产)数据库之后。【参考方案2】:

答案很傻——重启apache和postgresql。多么美好的一天。

【讨论】:

以上是关于django 和 postgres 的间歇性数据库错误:django 有时会尝试查询我几周前删除的数据库的主要内容,如果未能解决你的问题,请参考以下文章

由于 CSRF 故障(Django 1.2.3)导致间歇性 403

同一虚拟主机上的两个 django 应用程序的间歇性问题

尽管有足够的可用内存,但Postgres会出现内存错误

使用 Django 从 Postgres 导出 JSON 时结果不一致

Django - 无法使用两个数据库进行测试(带有 gis 扩展的 postgres 和 mongoDB (Djongo)

Django 和 postgres - 在模型字段中将数据存储为 json 的缺点