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メソッドは一切使用しないでください。データベース オブジェクトは、接続を自動的に管理できます。メソッドconnectは、リスナーの設定接続を明示的に検証するなど、非常に特定のタスクのためにのみ存在します。

オブジェクトに対して単一のクエリを直接実行する必要があり、タスクまたはトランザクションdb内で一連のクエリを実行する必要があります。クエリの連鎖も参照してください。

max次のように を使用して、接続パラメータを介してデフォルトのプール サイズを変更できます{max: 20}接続構文を参照してください。

于 2016-09-19T11:29:37.367 に答える