【发布时间】:2021-07-03 04:22:54
【问题描述】:
我有一个用例,即许多与数据库的连接是使用 pg-promise 动态创建的。有时我需要再次连接到相同的数据库和用户,但密码已更改。
有没有办法更新现有连接,所以我没有收到“警告:为同一连接创建重复的数据库对象。”?
编辑以获得更好的解释:
上下文 我有一个非传统的应用程序,它是一个节点服务,它使用 Postgres + PostGIS 在软件 QGIS 中处理地理空间数据采集。
此应用程序在 PostgreSQL 服务器中创建临时用户,并根据用户需要执行的工作类型管理表和列的权限。
代码
const dbs = {} //global variable that stores all connections
const getConnection = async (user, password, server, port, dbname) => {
const connString = `postgres://${user}:${password}@${server}:${port}/${dbname}`
if (connString in dbs) {
return dbs[connString] //if connection already exists returns the connection
}
dbs[connString] = db.pgp(connString) //create new connection
await dbs[connString] //tests if connections is correct
.connect()
.then(obj => {
obj.done() // success, release connection;
})
.catch(e => {
errorHandler.critical(e)
})
return dbs[connString]
}
我想要添加另一种情况,如果连接已经存在但密码已更改,它将更新现有的连接密码(或销毁它并创建一个新密码)。
【问题讨论】:
-
您是手动连接吗?如果是这样,那为什么?在任何情况下,您都应该包含您正在做的事情的代码示例。
-
已编辑以获取更多解释。
-
我自己尝试了几种实现,直到我得到一个工作。用最终解决方案更新了答案;)
标签: pg-promise