使用pg-promise的连接

时间:2016-09-19 10:55:41

标签: node.js postgresql heroku pg-promise

所以我使用pg-promise查询我的数据库。由于我使用的是heroku postgres(免费版),因此最大连接数为20.

要连接到数据库,我使用



pgp(process.env.DATABASE_URL + '?poolSize=10')
  .connect()
  .then( sco => {
    dbclient = sco;
  })
  .catch( err => {
    console.error(err);
  })




我使用dbclient变量来运行查询,例如



dbclient
  .one('select ...')
  .then(() => ...)
  .catch( res.status(500).send);




即使我将池大小设置为10,连接数也会无限增加,我的应用程序崩溃了。

我该如何解决这个问题?每次运行查询时都必须释放客户端吗?

编辑:

所以我编辑了我的代码,这正是我现在使用它的方式,我仍然遇到同样的问题。



const pgp = require('pg-promise')();
pgp.pg.defaults.poolSize = 10;

router.get('/', (req, res) => {
  pgp(process.env.DATABASE_URL).any('select ...')
        .then((result) => res.status(200).send(result))
        .catch(err => res.status(500).send({err}));
});




1 个答案:

答案 0 :(得分:2)

首先,根本不要使用方法connect。数据库对象可以自动管理连接。方法connect仅适用于某些非常具体的任务,例如setting up listenersexplicitely verify the connection

您应该直接针对db对象执行单个查询,并且应该在taskstransactions内执行查询链。另请参阅Chaining Queries

您可以更改默认池大小,如下所示:pgp.pg.defaults.poolSize = 20。你应该在初始化库之后立即开始。