根据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个连接。
这是预期的行为还是我错过了什么?
答案 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)