所以我使用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}));
});
发布于 2016-09-19 19:29:37
首先,根本不要使用connect方法。数据库对象可以自动管理连接。Method connect只适用于一些非常特定的任务,如setting up listeners或explicitely verify the connection。
您应该直接对db对象执行单个查询,并且应该在tasks或transactions内部执行查询链。另请参见Chaining Queries。
您可以使用如下所示的max通过连接参数更改缺省池大小:{max: 20}。请参阅Connection Syntax。
https://stackoverflow.com/questions/39571455
复制相似问题