我正在写一个使用Postgres数据库一个Node.js的web服务器。 我曾经在这样一个新请求连接:
app.get('/', function (req, res) {
pg.connect(pgconnstring, function (err, client) {
// ...
});
});
但也有少数的请求后,我发现“超出内存”在Heroku尝试连接时出错。 我的数据库只有10行,所以我看不出这可能发生。 我所有的数据库访问是这样的形式:
client.query('SELECT * FROM table', function (err, result) {
if (err) {
res.send(500, 'database error');
return;
}
res.set('Content-Type', 'application/json');
res.send(JSON.stringify({ data: result.rows.map(makeJSON) }));
});
假设内存错误是由于其在数据库中的几个持续连接,我切换到风格我看到几个node-postgres
在文件的顶部连接只有一次的例子:
var client = new pg.Client(pgconnstring);
client.connect();
app.get('/', function (req, res) {
// ...
});
但现在我的请求挂起(无限期?)当我尝试连接中断后执行查询。 (我通过杀死一个Postgres服务器,并把它备份模拟它。)
所以,我该怎么做这些吗?
- 适当集中Postgres连接,这样我可以“重新连接”不会耗尽内存每次。
- 拥有全球客户网络故障后自动重新连接。