javascript - 使用 pg 管理从 nodejs 到 postgres 的许多连接

标签 javascript node.js postgresql npm pg

我想执行一个执行大量查询的脚本,我使用 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/

相关文章:

c# - 从 ASP.net 代码隐藏更改 javascript src 属性

javascript - 为什么多功能代码行不会产生错误而只是停止执行?

sql - 免费提供的分层信息示例数据集和真实名称

performance - Postgres 性能问题

javascript - HTML 5 Canvas - 文本到多边形

javascript - 当我从脚本创建视频时,向视频添加更多属性

node.js - 注意插入新的子数组

node.js - Socket.io 'on' 返回未定义

node.js - 发送后无法设置标题。使用 Node 和 express 第二次调用 REST API

sql - sql中OR和UNION的输出区别