Knex. js принудительное повторное использование сеанса для 4 следующих запросов - PullRequest
0 голосов
/ 28 января 2020

У меня есть подзапрос, который используется в четырех разных запросах, которые все выполняются для представления некоторой функциональности, подобной панели управления. Общим основанием для всех запросов является этот подзапрос, который я хочу извлечь во временную таблицу. Это был успех, но при использовании Knex. js (что удивительно) соединения объединяются, что означает, что все запросы используют разные соединения, что снова приводит к удалению временной таблицы между ними.

Есть ли способ принудительно использовать одно соединение и одну сессию в Knex таким образом? Или мне нужно искать другие обходные пути, например, обернуть все это в транзакцию?

1 Ответ

1 голос
/ 29 января 2020

По сути, вы можете сделать это только запустив эти запросы в одной транзакции. Это заставляет knex использовать одно и то же соединение для всех запросов.

Другой способ сделать это - вручную получить соединение из пула с помощью knex.client.aqcuireConnection() и использовать knex.connection(connection) для выполнения запросов в этом единственном соединении. Наконец, вам необходимо освободить соединение обратно в пул, чтобы не пропускать соединения с knex.client.releaseConnection(connection).

Что-то вроде:

let connection = await knex.client.acquireConnection();
try {
    const res = await knex('table').connection(connection).where('id',1);
    const res2 = await knex('table2').connection(connection).where('id',1);
} finally {
    knex.client.releaseConnection(connection);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...