Knex.js 为以下 4 个查询强制重用会话

Knex.js force session reuse for 4 following queries

我有一个子查询在四个不同的查询中使用,所有这些查询都执行以显示一些类似仪表板的功能。 所有查询的共同点是我想在临时 table 中提取的这个子查询。 这是成功的,但是使用 Knex.js(这太棒了)连接被合并,这意味着所有查询都使用不同的连接,这再次导致临时 table 被丢弃。

有没有办法强制使用一个连接,并以这种方式在 Knex 中使用一个会话?或者我是否需要寻找其他解决方法,例如将其全部包装在一个事务中?

基本上,您只能通过 运行在同一事务中执行这些查询来做到这一点。这会强制 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);
}