在Postgres 9.5.7中,我有一个具有几种不同模式的数据库,例如多租户架构。
我已经按照this answer中的示例为特定查询动态设置了架构。所有上下文都封装在一个类中,据我所知,我以正确的方式调用pgp
,但仍然收到WARNING: Creating a duplicate database object for the same connection.
错误。
我有一个类似的配置初始化程序:
// initializer.js
const initOptions = {
schema(name) {
return name ? name : 'public'
}
}
const _config = {
host: process.env.DBSERVER || nconf.get('database:server') || 'localhost',
port: process.env.DBPORT || nconf.get('database:port') || '5432',
user: process.env.DBUSER || nconf.get('database:user') || 'dev',
password: process.env.DBPASS || nconf.get('database:password') || 'pass1234',
database: process.env.DBNAME || nconf.get('database:user') || process.env.DBUSER || 'dev'
}
const pgp = require('pg-promise')(initOptions)
// default database
const pgdb = pgp(_config)
module.exports = {
pgp
, pgdb
, _config
}
和使用它的类是这样的:
const { pgp, _config } = require('../db/initializer')
class Tenant {
constructor(name) {
this.name = name
this.db = pgp(_config, name)
}
async getMetadata() {
try {
const data = await this.db.many(`SELECT * FROM versions`)
return data
} catch (err) {
log.error(`Error getting versions for ${this.name}:`, err)
return null
}
}
}
此警告的堆栈跟踪指向_config
中的这一行:
host: process.env.DBSERVER || nconf.get('database:server') || 'localhost',
我要立即按需创建一堆这样的类