我想执行一个执行大量查询的脚本,我使用 pg来管理连接。问题是,当我的池已满时,我的程序会停止并且不会对 future 的查询进行排队。我尝试将 poolSize 设置为 0,但它也不起作用。
pg.defaults.poolSize = 100000000;
var pgQuery = function(query) {
return new Promise(function(resolve, reject) {
pg.connect(conString, function(err, client) { // When the pool is full, pg doesn't connect to the DB
if(err) {
console.error('error fetching client from pool', err);
reject(err);
}
client.query(query,
function(err, res) {
if(err) {
console.error('error running query', err);
reject(err);
}
resolve(res);
});
});
});
};
有什么建议吗?
最佳答案
我发现了我的问题,我没有将客户端释放回池中。为此,我必须在执行查询后调用 did() 回调。
var pgQuery = function(query) {
var attempt = 0;
return new Promise(function(resolve, reject) {
// I added the done callback in parameter.
pg.connect(conString, function(err, client, done) {
if(err) {
console.error('error fetching client from pool', err);
attempt++;
if (attempt < 11) {
pgQuery(query);
} else {
reject(err);
}
}
client.query(query,
function(err, res) {
//call `done()` to release the client back to the pool
done();
if(err) {
console.error('error running query', err);
reject(err);
}
resolve(res);
});
});
});
};
此外,我的请求是 CPU 密集型的,需要很长时间才能执行。由于我的请求被调用了两次,我用
修复了这个问题// Without this line the http request is triggered twice
req.connection.setTimeout(15*60*1000)
关于javascript - 使用 pg 管理从 nodejs 到 postgres 的许多连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26760328/