2017-10-10 27 views
0

私はクエリを次ていますpgプールがアクティブ/有効かどうかを確認するにはどうすればよいですか?

QUERY 1:以下のコードでは、プールの任意の関数を呼び出す前に、どのように私はプールがアクティブであることを確認してください?

const { Pool } = require('pg'); 
var pool = new Pool(); //global variable, used by multiple modules 

function f1(){ 
    /* 
    Check here if pool is active or not. If active, then execute following 
    code 
    */ 
    pool.connect(...) 
} 

私がチェックしないと、プールがアクティブな状態でない場合、次のエラーが発生することがあります(他のモジュールによって終了されている可能性があります)。

Error: Cannot use a pool after calling end on the pool 

クエリ2:プールを終了しないとどうなりますか?

答えて

0

QUERY 1:プールの機能を呼び出す前に、プールがアクティブであることを確認するにはどうすればよいですか?

あなたがアクティブであることを意味していませんでした。プールを初期化すると、そこから接続を取得してDBをクエリすることができます。プールを使用し続ける場合は、end()を呼び出しないでください。私はプールを終了しない場合はどうなります:

const pool = new Pool({ 
    host: 'localhost', 
    user: 'database-user', 
    max: 20, 
    idleTimeoutMillis: 30000, 
    connectionTimeoutMillis: 2000, 
}) 

クエリ2 - 次のような構成のためとして、あなたはタイムアウトを設定することができますか?

前述のように、デフォルトのタイムアウトが設定されています。 pool.end()に電話せず、アプリケーションがタイムアウト期間中アイドル状態の場合、接続は自動的に切断されます。ドキュメントを1として

-

呼び出すpool.endは、すべてのアクティブなクライアントのプールを排出それらを外し、プール内の任意の内部タイマーをシャットダウンします。これは、プールを使用しているスクリプトの最後で、またはプロセスが正常にシャットダウンしようとしているときに、これを呼び出すのが一般的です。よりdetialsため

ドキュメント参照 - 最初のクエリに関してはhttps://node-postgres.com/api/pool

+0

を、私は、プールは 'ていない()(pool.end'場合、それ自体で閉じる/終了することができること任意の可能性があるかどうかを知りたいと思いました使用された)。 [スレッド](https://github.com/brianc/node-postgres/issues/1477)の議論のとおり、答えは「いいえ」と思われます。 –

+0

プールについてはわかりませんが、プール内の接続は指定されたタイムアウト後に閉じられます。 –

+0

データベース接続については、ドキュメントに明記されていますが、適切なイベントリスナーもあります。私はプールにのみ疑問があります。 –

関連する問題