2014-11-15 75 views
0

所以basicly创建我的数据库客户端这样的:如何让PostgreSQL连接保持打开状态?

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

,但是,从DB innactivity的一段时间后,客户端可能会断开连接,并给了我这个错误:

"Error: read ECONNRESET" 

我试着这样做,以保持它打开:

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

但是,这不起作用,我仍然得到错误。任何人之前处理过这个问题,并有任何想法如何解决它?

+0

难道你不能只使用node-postgres提供的默认连接池吗? –

+0

我使用这两种方法,但不能使用该池进行交易。 – Mykybo

+0

您的解决方案是使用适当的连接池,特别是pgbouncer或pgpool-II。 –

回答

1

听起来好像您可能遇到由于NAT连接跟踪表或类似事件到期而导致连接丢失的问题。

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

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

相关问题