Search code examples
javascriptnode.jsknex.js

Dynamically change database with Knex queries


I have an issue when I am trying to set Knex database dynamically. I have multiple database, which increments in every hour. ( e.g db-1-hour, db-2-hour). When we switched into a new hour I wan to use the next database. I created a sample function which returns a new Knex function based on the new database but I got a deprecated warning.

My config

import knex from 'knex';

const knexConfig = {
  client: 'pg',
  connection: {
    host: host,
    port: port,
    user: user,
    database: '',
    password: password,
  },
  pool: {
    min: 2,
    max: 10,
  },
  timezone: 'UTC',
};

exports const getCurrentDb = async () => {
 const hourDb = await getLatestDbName()
 cons knexConfig.connection.database = hourDb; // I update the database name
 return knex(knexConfig);
}
 

Usage

import { getCurrentDb } from "./config"

const getSomething = async () => {
 const db = await getCurrentDb()
 return db.select().from("something")
}

The code is working but I always get this waring message:

calling knex without a tableName is deprecated. Use knex.queryBuilder() instead.

How could I connect to a database dynamically? Thank you in advance!


Solution

  • The warning message is not related to the DB switch mechanism.

    Try to change your select statement to something like:

    import { getCurrentDb } from "./config"
    
    const getSomething = async () => {
     const db = await getCurrentDb()
     return db("something").columns('*')
    }