在 pg-promise API 中动态选择数据库/表

Posted

技术标签:

【中文标题】在 pg-promise API 中动态选择数据库/表【英文标题】:Dynamically choosing database/tables in pg-promise API 【发布时间】:2021-11-23 13:50:10 【问题描述】:

pg-promise API 推荐一个初始连接对象,如:

var pgp = require('pg-promise')();
const mysqlcon = `postgres://$process.env.DB_USER:$process.env.DB_PASSWORD@$process.env.DB_HOST:5432/my_database` //note that 'my_database' is hardcoded here
var db = pgp(mysqlcon);
module.exports = db;

然后我用这个对象查询my_database数据库中的table_customers

var db = require('./models/postgres')
db.many('SELECT * from table_customers')
  .then(function (data) 
    console.log('DATA:', data)
  )
  .catch(function (error) 
    console.log('ERROR:', error)
)

这很好用,但是如果我要从另一个数据库中选择另一个表,我如何动态修改连接对象以将 my_database 更改为 another_database? p>

【问题讨论】:

【参考方案1】:

PostgreSql 中的连接是数据库绑定的,因此您只需使用两个数据库对象:

const mySqlCon1 = `postgres://.../database1`;
const mySqlCon2 = `postgres://.../database2`;

export const db1 = pgp(mySqlCon1);
export const db2 = pgp(mySqlCon2);

【讨论】:

【参考方案2】:

为动态更改 TABLE 或 DATABASE 创建变量

var db = require('./models/postgres')
db.many('SELECT * FROM $YOUR_VAR')
.then(function (data) 
console.log('DATA:', data)
  )
.catch(function (error) 
 console.log('ERROR:', error)
)

【讨论】:

然后根据选择的用户输入,或者选项,从动态数据库表数据中选择你需要的数据,但是不要忘记不同数据库中的表应该是一样的,或者多做一些逻辑再创建一个用于从数据库中选择表库的 var

以上是关于在 pg-promise API 中动态选择数据库/表的主要内容,如果未能解决你的问题,请参考以下文章

Pg-promise插入/事务在异步队列中不起作用

如何从 pg-promise 中的 db.any() 承诺中获取价值?

我应该在哪里初始化 pg-promise

启动应用程序时使用 pg-promise 验证数据库连接

pg-promise:返回查询结果的正确方法

如何使用 pg-promise 帮助器返回插入查询结果值