Динамическая установка схемы в pg-обещании все еще предупреждает о дублирующих объектах базы данных - PullRequest
0 голосов
/ 09 мая 2019

У меня есть база данных, которая имеет несколько различных схем, например, мультитенантную архитектуру, в Postgres 9.5.7.

Я следовал примеру в этот ответ для динамической установкисхема для конкретных запросов.Весь контекст инкапсулирован в классе, и, насколько я могу судить, я правильно звоню 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',

Я создаю кучу этих классов одновременно и по требованию

...