2017-10-10 162 views
0

我有以下疑问:如何检查pg池是否活动/有效?

问题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

查询1:在下面的代码中,在调用池的任何函数之前,我如何确保该池是活动的?

没有得到你的意思是积极的。一旦你创建了池,你就可以从它获得连接,用它来查询数据库。如果你想继续使用池,不要在它上面调用end()。至于配置,可以配置超时如下 -

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

问题2:如果我不结束池会发生什么?

正如我在上面说的那样,有默认超时设置。如果您没有拨打pool.end()并且应用程序在超时时间内处于空闲状态,连接将自动断开。

按照文档 -

调用pool.end会耗尽所有活动的客户池,它们断开,并关闭池中的任何内部定时器。通常在脚本结束时使用该池或者当您的进程试图关闭干净时调用它。

更多detials参考文档 - https://node-postgres.com/api/pool

+0

至于第一个查询,我想知道是否有任何可能性,池可能结束/自行关闭(如果'pool.end()'还没有已被使用)。根据[线程](https://github.com/brianc/node-postgres/issues/1477)中的讨论,似乎答案是“否”。 –

+0

不确定游泳池,但其中的连接将在指定的超时后关闭。 –

+0

对于数据库连接,它明确写在文档中,并且适当的事件监听器也在那里。我只怀疑pg池。 –