1

所以我使用 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}));
});

4

1 回答 1

4

首先,根本不要使用方法连接。数据库对象可以自动管理连接。方法connect仅适用于一些非常具体的任务,例如设置侦听器显式验证连接

您应该直接对db对象执行单个查询,并且应该在任务事务中执行查询链。另请参阅链接查询

您可以通过连接参数更改默认池大小,使用max,如下所示{max: 20}:请参阅连接语法

于 2016-09-19T11:29:37.367 回答