我正在Ubuntu-12.04上运行django-celery应用程序。

当我从Web界面运行celery任务时,出现以下错误,形式为postgresql-9.3日志文件(最大日志级别):

2013-11-12 13:57:01 GMT tss_usr 8113 LOG:  could not receive data from client: Connection reset by peer

tss_usr是django应用程序数据库的postgresql用户,(在此示例中)8113是杀死连接的进程的pid。

您是否知道为什么会发生这种情况,或者至少如何调试此问题?

为了使事情再次起作用,我需要重新启动postgresql,这是非常不舒服的。

最佳答案

我知道这是一篇较旧的文章,但我刚刚找到它,因为今天我的postgres日志中有同样的错误。我将其范围缩小为PDO select语句。我在Ubuntu Precise上使用Zend Framework 1.10.3。

如果$ opinion为长文本字符串,则以下pdo语句生成错误。在我的postgres表中,列意见是Text类型。如果$ opinion在一定数量的字符以下,则查询成功。 1000个字符可以正常工作。 2000个字符失败,并显示“无法从客户端接收数据:对等方重置连接”。

  $select = $this->db->select()
           ->from( 'datauserstopics' )
           ->where("opinion = ?",trim($opinion))
           ->where("datatopicsid = ?",trim($tid))
           ->where("datausersid= ?",$datausersid);

  $stmt = $this->db->query($select);

我通过使用以下方法解决了这个问题:
-> where(“substr(opinion,1,100)=?”,trim(substr($ opinion,1,100)))

这不是一个完美的解决方案,但就我的目的而言,使用substr()的select语句就足够了。

请注意,将长字符串插入相同的表/列没有问题。对于我来说,断开连接问题仅出现在文本字符串相对较长的PDO select上。

09-28 13:03