首页 > 解决方案 > 如何使用 node-postgres 包在 node.js 中动态创建 postgreSQL 连接池并导出以供使用

问题描述

我有一个应用程序,我需要为订阅使用此应用程序的新公司创建一个新数据库。因此,我正在维护一个主数据库,该数据库存储该公司列表及其各自的数据库名称。现在,当新公司需要使用这个新订阅的应用程序时,我需要Pool为他们的数据库创建一个新的以供使用。如何以编程方式创建它并将其导出node.js

我尝试了一种方法。我认为池是一个简单的对象,所以我尝试在创建数据库后创建它并将其存储在主数据库中,并在需要时尝试使用该池对象(一个池对我来说就足够了,我不想断开池,因为它应该 24/7 运行,这就是我存储它的原因)。但是当我尝试连接到它时,我失败了以下错误语句

TypeError: myPool.connect is not a function

因为一旦我将它作为 jsonb 存储在 masterdb 中,它就不再是一个池。

有关如何解决此问题的建议将很有帮助。

标签: javascriptnode.jspostgresqlnode-postgres

解决方案


// eg. poolBuilder
const { Pool } = require('pg')

const pools = new Map();
function getPool(companyName){
   if(!pools.has(companyName){
     pools.set(companyName,  new Pool({
      host: 'localhost',
      user: 'database-user',
      max: 20,
      idleTimeoutMillis: 30000,
      connectionTimeoutMillis: 2000,
    }))
   }
   return pools.get(companyName);
}

module.exports.getPool = getPool;
const {getPool} = require("poolBuilder");

const pool = getPool();

推荐阅读