【问题标题】:Manage many connections from nodejs to postgres with pg使用 pg 管理从 nodejs 到 postgres 的许多连接
【发布时间】:2014-11-06 11:38:28
【问题描述】:

我想执行一个执行大量查询的脚本,我使用pg 来管理连接。问题是当我的池已满时,我的程序会停止并且不会对未来的查询进行排队。我尝试将 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);
      });
    });
  });
};

有什么建议吗?

【问题讨论】:

    标签: javascript node.js postgresql npm pg


    【解决方案1】:

    我发现了我的问题,我没有将客户端释放回池中。为此,我必须在执行查询后调用 done() 回调。

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-06
      • 1970-01-01
      • 1970-01-01
      • 2019-06-06
      • 2020-02-21
      • 2019-04-22
      • 1970-01-01
      • 2016-06-18
      相关资源
      最近更新 更多