节点 PostgreSQL 超时客户端查询
Posted
技术标签:
【中文标题】节点 PostgreSQL 超时客户端查询【英文标题】:Node PostgreSQL timeout a query by the client 【发布时间】:2015-11-01 11:17:49 【问题描述】:我正在使用 Node 包 pg
用于 postgres (here):
npm i pg
var pg = require('pg');
我正在查询一个不属于我的大型集群,在某些情况下可能会失败。失败可能是易于处理的不良响应或无休止的查询。 请注意,我不能在数据库端引入更改 [配置或其他方式]。
有没有办法设置查询时间的超时? 我希望我的客户在设定的时间后放弃,并返回超时错误。
在文档中找不到类似的内容。
谢谢你!
【问题讨论】:
似乎只能通过cancel
命令,根据作者:github.com/brianc/node-postgres/issues/518
【参考方案1】:
最佳实践是使用初始化查询,为会话设置查询超时。
SET statement_timeout TO 15000; # x milliseconds or 0 (turns off limitation)
这需要一个以毫秒为单位的超时参数,并应用于会话。 之后,当查询花费的时间超过指定的值时,您将收到来自服务器的错误。请注意这是应用户要求:
ERROR: Query (150) cancelled on user's request
另请注意,这实际上取消了服务器端的查询,从而减少了负载。
【讨论】:
【参考方案2】:您可以在客户端设置statement_timeout
:
const Client = require('pg')
const client = new Client(
statement_timeout: 10000
)
或在游泳池中:
const Pool = require('pg')
const pool = new Pool(
statement_timeout: 10000
)
【讨论】:
谢谢,已经有一段时间了,我不再使用 Node.js,但这对未来的 Google 员工来说非常有用。 :)以上是关于节点 PostgreSQL 超时客户端查询的主要内容,如果未能解决你的问题,请参考以下文章