Postgresql错误:连接已终止

Postgresql Error: connection terminated

本文关键字:终止 连接 错误 Postgresql      更新时间:2023-09-26

我有一个链接到postgres数据库的简单应用程序。当您加载应用程序时,它会读取大约30行数据。但每隔一段时间它都不会加载,当我查看服务器时,我会出现错误错误:连接终止。

通常如果我在短时间内加载几次。

有人知道为什么会发生这种事吗?我工作太辛苦了吗?

代码如下:

    function getDB(callback){
        console.log('inside getDB')
        Client.connect(function(err){
            if(err){
                return console.log('connection error', err)
            }
            Client.query('SELECT * FROM gallery', function(err, result){
                if(err){
                    return console.log('error receiving data', err)
                } else{
                callback(null, result.rows)
                }
                Client.end()
            })
        })
    }

在将行插入Postgres数据库的Node方法上,我遇到了相同的"错误:连接终止"错误。以下是我如何修复它。

控制台错误没有太大帮助,所以我查看了Postgres日志。(使用Mac)

$ tail -10 /usr/local/var/log/postgres.log 
2019-02-24 10:06:38.920 CST [58520] LOG:  could not receive data from client: Connection reset by peer
2019-02-24 10:06:38.921 CST [58520] LOG:  unexpected EOF on client connection with an open transaction

这意味着客户端在服务器完成之前以某种方式断开了连接。在我的例子中,我没有正确地调用异步方法,所以客户端在数据库语句执行之前完成,并且客户端丢弃了数据库连接。我使用了async/await风格的Node方法,但我忘记用await调用我的异步方法,这导致了错误。

对于Node中的Postgres查询,请务必遵循以下示例之一。

看起来您正在使用node postgres。您应该考虑使用它的连接池。来自文件:

"通常情况下,您将通过客户。客户端需要花费大量的时间来建立新连接。客户端还消耗大量PostgreSQL服务器上的资源-不是你想在上面做的事情每个http请求。好消息:nodepostgres船内置客户端池。"

创建新连接时会发生很多事情,您应该尽可能避免这种情况。在你的情况下,利用资金池可能会有所帮助。