如何使用 psycopg 设置驱动程序端查询执行超时?

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

psycopg 是否有驱动程序端套接字/查询超时设置?我想限制查询执行时间,以便针对遇到中断的数据库运行的查询将超时,而不是无限期地运行。如果没有套接字超时设置,是否有其他方法可以实现此行为?

我已经寻找了这个问题的解决方案,但我发现的唯一建议是设置statement_timeout服务器设置或使用Postgres的pg_cancel_backend函数来取消另一个线程的查询。这两个选项对我来说都不起作用,因为它们都是服务器端设置/操作。如果数据库遇到中断,它将无法强制执行 statements_timeout 设置或接受 pg_cancel_backend 调用。

我查看了 psycopg 和 PEP249 文档,但找不到任何设置套接字超时的方法。这让我感到惊讶,因为这似乎是相当重要的功能。我对 JDBC 驱动程序有一些经验,并且 JDBC 接口定义了一个 setNetworkTimeout 方法来实现此功能。 PEP249 没有同等产品是否有原因?

python sql postgresql psycopg2 pep249
1个回答
0
投票

只需在启动数据库连接时更改statement_timeout的设置即可:

SET statement_timeout TO 1000;-- in milliseconds

在此语句之后运行的任何使用此数据库连接的查询都将在此毫秒数后中止。

您可以随时恢复默认设置:

SET statement_timeout TO DEFAULT;

您还可以针对每个数据库用户或数据库进行设置。

当前设置可以这样找到:

SHOW statement_timeout;
© www.soinside.com 2019 - 2024. All rights reserved.