如何检查pg池是否活动/有效?
问题描述:
我有以下疑问:如何检查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:如果我不结束游泳池会发生什么?
答
查询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
至于第一个查询,我想知道是否有任何可能性,池可能结束/自行关闭(如果'pool.end()'还没有已被使用)。根据[线程](https://github.com/brianc/node-postgres/issues/1477)中的讨论,似乎答案是“否”。 –
不确定游泳池,但其中的连接将在指定的超时后关闭。 –
对于数据库连接,它明确写在文档中,并且适当的事件监听器也在那里。我只怀疑pg池。 –