如何在node-postgres的客户端或池之间进行选择

问题描述 投票:0回答:3

来自 https://node-postgres.com/features/connecting ,似乎我们可以选择

Pool
Client
来执行查询

pool.query('SELECT NOW()', (err, res) => {
  console.log(err, res)
  pool.end()
})

client.query('SELECT NOW()', (err, res) => {
  console.log(err, res)
  client.end()
})

它们的功能看起来非常相似。但是,文档并没有解释

Pool
Client
之间的区别。

请问,在选择

Pool
Client
之前我应该考虑什么?

node.js node-postgres
3个回答
110
投票

我可以知道,在选择池还是客户端之前我应该考虑什么?

如果您有或预计有多个并发请求,请使用池。这就是它的真正用途:提供可重用的开放

client
实例池(只要可以重用
client
即可减少延迟)。

在这种情况下,您绝对不希望在查询完成时调用pool.end()

,您希望在应用程序终止时保留该调用,因为
pool.end()
会处理所有打开的
client
实例。 (请记住,重点是保持固定数量的可用 
client
 实例。)


5
投票
要知道的最显着的区别之一是,当您使用

Client

 时,您必须使用 
transactions
来自
文档

您必须对一个内的所有语句使用相同的客户端实例 交易。 PostgreSQL 将事务隔离到各个客户端。 这意味着如果您通过 pool.query 初始化或使用事务 方法你就会遇到问题。请勿使用交易 pool.query方法。


0
投票
关于交易,您可以从池中正确执行它们。为此,您必须获取单个连接(即单个客户端)。从中,您可以执行一大堆查询(在本例中,是“开始事务”,您的查询,然后是“提交/回滚”),完成后,您将释放此连接。此过程将确保一切按预期进行。

© www.soinside.com 2019 - 2024. All rights reserved.