pg-promise任务双重连接?

时间:2018-06-27 10:08:22

标签: node.js pg-promise

根据Chaining-Queries pg-promise Wiki Task是在单个共享连接中进行多个查询的首选方法。

虽然我知道对单个查询使用Task毫无意义,但我对测试使用单个查询只是为了查看它在日志中的显示方式。取得的结果使我有些疑惑

没有任务:

07:14:02 connect(user@db); useCount: 0
07:14:02 SELECT * FROM t
07:14:02 disconnect(user@db)

带有任务:

07:15:27 connect(user@db); useCount: 0
07:15:27 task/start
07:15:27 connect(user@db); useCount: 0
07:15:27 SELECT * FROM t
07:15:27 disconnect(user@db)
07:15:27 task/end; duration: .009, success: true
07:15:27 disconnect(user@db)

useCount: 0意味着新的物理分配连接

连续进行多个此类查询可重复该模式。每个任务包装的查询都显示2个分配的连接。一个用于主(?)线程,第二个用于Task本身。

useCount正确地增加了,这意味着可以从池中重用连接。但是主要的事情仍然存在-每个Task处理都会从连接池中分配2个连接。

这是预期的行为还是我错过了什么?

1 个答案:

答案 0 :(得分:0)

由于篇幅太大,我无法将其发布为对@ vitaly-t评论的回复。

为了让子查询重复使用父会话上下文,请确保您调用任务方法中提供的上下文对象 t

return this.db.task(t => {
  return t.any('select now()').then(
    () => t.any('select now()').then(
      () => '2 queries are executed'
    )
  )
})

我们得到

13:30:26 connect(user@db); useCount: 0
13:30:26 task/start
13:30:26 task: select now()
13:30:26 task: select now()
13:30:26 task/end; duration: .005, success: true
13:30:26 disconnect(user@db)