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

答案 0 :(得分:2)
首先,根本不要使用方法connect。数据库对象可以自动管理连接。方法connect仅适用于某些非常具体的任务,例如setting up listeners或explicitely verify the connection。
您应该直接针对db
对象执行单个查询,并且应该在tasks或transactions内执行查询链。另请参阅Chaining Queries。
您可以更改默认池大小,如下所示:pgp.pg.defaults.poolSize = 20
。你应该在初始化库之后立即开始。