节点 PostgreSQL 使客户端的查询超时

Sel*_*ish 6 javascript database postgresql timeout node.js

我正在pg为 postgres使用 Node 包(这里):

npm i pg

var pg = require('pg');
Run Code Online (Sandbox Code Playgroud)

我正在查询一个不属于我的大型集群,并且在某些情况下可能会失败。失败可能是易于处理的不良响应或无休止的查询。请注意,我无法在 DB 端引入更改 [config or other]。

有没有办法为查询时间设置超时?我希望我的客户在设定的时间后放弃,并返回超时错误。

在文档中找不到任何此类内容。

谢谢前面!

Shi*_*127 8

您可以statement_timeout在客户端设置:

const { Client } = require('pg')

const client = new Client({
  statement_timeout: 10000
})
Run Code Online (Sandbox Code Playgroud)

或在游泳池中:

const { Pool } = require('pg')

const pool = new Pool({
  statement_timeout: 10000
})
Run Code Online (Sandbox Code Playgroud)


Sel*_*ish 5

最佳实践是使用初始化查询来设置会话的查询超时。

    SET statement_timeout TO 15000; # x milliseconds or 0 (turns off limitation)
Run Code Online (Sandbox Code Playgroud)

这需要一个以毫秒为单位的超时参数,并应用于会话。之后,当查询花费的时间超过指定的值时,您将从服务器收到错误。请注意,这是根据用户的要求

    ERROR:  Query (150) cancelled on user's request
Run Code Online (Sandbox Code Playgroud)

另请注意,这实际上取消了服务器端的查询,从而减少了负载。