2016-07-23 55 views
0

我使用的Heroku Postgres的每一次我在我的應用程序運行查詢時的連接保持打開狀態。這導致太多的同時連接並因此導致錯誤。管理連接PostgreSQL和Node.js的

當部署後,我用我的應用程序進行了一下我得到這個錯誤:

{"name":"error","length":109,"severity":"FATAL","code":"53300","file":"miscinit.c","line":"551","routine":"InitializeSessionUserId"} 

當我在本地運行我得到這個錯誤:

{"name":"error","length":109,"severity":"FATAL","code":"53300","file":"miscinit.c","line":"551","routine":"InitializeSessionUserId"} 

這是我的方式我每次需要查詢數據庫時都會處理查詢:

router.route('/campaigns') 
    .get(restrictTo('advertiser'), function(req, res) { 
     pg.defaults.ssl = true; 
     pg.connect(`DATABASE_URL`, function(err, client, done) { 
      if (err) { 
       console.log('Connection issue when retrieving data, error will be thrown: ' + JSON.stringify(err)); 
       throw err; 
      } else { 
       client.query(`SELECT * FROM campaign WHERE agentid = ${req.user.agentid};`, 
        function (err, result) { 
         if(err) 
          console.log(err.toString()); 
         res.render('console/campaigns', result); 
        }); 
      } 

     }) 
    }) 

我做錯了什麼,因爲我相信連接不會關閉。我該如何解決它?

+0

如果使用[PG-承諾(https://github.com/vitaly-t/pg-promise),你將永遠不會有這樣那樣的問題,因爲你不會需要做的手動連接所有。 –

+0

是的,這就是我所做的,但是我花了整整一天才弄清楚了這一點。 – ocram

+0

@ vitaly -t我會對'pg-promise'有個疑問:http://stackoverflow.com/questions/38545958/return-in-pg-promise – ocram

回答

0

我認爲你應該使用client.end();每個查詢完成關閉連接後。