问题描述
我正在尝试创建一个用于查询nodejs中数据库的小型应用程序,我正在使用以下模块https://node-postgres.com/ 我设法在postgres中建立与数据库的连接,并且连接正确 (这是我的代码)
const express = require('express');
const fs = require('fs');
const app = express();
const port = 8080;
const { Pool } = require('pg');
const pool = new Pool({
user: 'Inv',host: 'localhost',database: 'database',password: 'password',port: 3000,idleTimeoutMillis:1000,connectionTimeoutMillis:0,});
pool.connect()
.then(
function (client){
let query = 'SELECT * FROM Clients';
function query_db(query){
client.query(query)
.then(
function(res){
console.log('query')
}
)
.catch(
function(err){
console.log(err.stack)
}
)
.finally(
function(){
client.release()
console.log('client disconect')
}
)
}
query_db(query)
return;
}
);
console.log(pool.totalCount);
setInterval(()=>{console.log(pool.totalCount)},100)
pool.on('error',(err,client) => {
console.error('Unexpected error on idle client',err)
process.exit(-1)
});
app.listen(port,() => {
console.log(`\u001b[7mServer in: http://localhost:${port}\u001b[0m\n`);
});
我的问题是池在此模块中如何真正工作?
由于到目前为止,我了解到的是池化不为每个客户端建立连接,因为这将使每个客户端都由数据库进行身份验证,并且此过程很耗时,同时又消耗了更多服务器资源,因此由于这个原因,这会减慢程序的执行速度,因此池会将一组客户端连接到数据库中的同一用户。
然后在程序中创建池,并使用语句pool.connect ()
将其正确连接到postgres,然后检查与pgadmin4中连接到数据库的用户列表,此后,我使用语句{ {1}},并且此查询正确完成了,问题是,根据我从完成查询后的node-postgres文档中了解到的,必须将客户端与池断开连接,以便其他客户端可以连接到所剩下的空间已经进行交易的客户端,这是通过client.query (query)
语句完成的,但是当调用client.release ()
时,连接到postgres的池的用户将断开连接,但是...为什么像那样???
该池的用户不应在postgres中保持连接状态,而只能将空间留给其他客户端使用????
因此,如果整个池已断开连接,则使该池不丢失的目标很重要????
通过省略client.release ()
来进行测试,这种行为会停止,但是然后...
如果不释放客户端,将达到连接到池的客户端的限制,并且客户端将永远等待,对吗??
还根据句子client.release ()
中的文档,它指示由于不活动而在断开客户端连接之前等待的时间,但这样做是可行的,但是当它断开客户端的连接时(如前一种情况),它将断开整个连接。 Postgres池...
那么池的实际操作是什么?
所以,如果我理解的是正确的...。使用池和使用单个客户端之间没有区别,对吗?
对于许多问题我感到抱歉,如果其中一些问题非常明显或很愚蠢,但我是node的新手,并且我已经在google上搜索了ad nauseam,但是文档非常基础,非常感谢您参加您有时间阅读我的疑问:'D
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)