【问题标题】:How do I keep PostgreSQL connection open?如何保持 PostgreSQL 连接打开?
【发布时间】:2014-11-17 12:51:51
【问题描述】:

所以基本上我这样创建我的数据库客户端:

client = new pg.Client(conString);
client.connect();

但是在数据库上闲置一段时间后,客户端可能会断开连接并给我这个错误:

"Error: read ECONNRESET"

我尝试这样做以使其保持打开状态:

db.client.on('error', function(e){        
    db.client.connect();
});

但这不起作用,我仍然得到错误。有人处理过这个问题并且知道如何解决吗?

【问题讨论】:

  • 不能直接使用node-postgres提供的默认连接池吗?
  • 我两个都用,但是你不能用矿池做交易。
  • 您的解决方案是使用适当的连接池,特别是 pgbouncer 或 pgpool-II。

标签: javascript node.js postgresql


【解决方案1】:

听起来您可能遇到了由于 NAT 连接跟踪表或类似情况过期而导致连接被丢弃的问题。

启用 TCP keepalives,server-side 或者如果您的客户端支持它,客户端。

如果您不能使用 TCP keepalives,您可以发送空查询,即将空字符串作为查询发送。这在 PostgreSQL 中是有效且合法的,并且会强制客户端和服务器之间进行往返,但不会给日志添加任何噪音。

【讨论】: