我正在编写一个使用 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 连接,以便我每次都可以“重新连接”而不会耗尽内存。
- 让全局客户端在网络故障后自动重新连接。