如何在事务模式下将statement_timeout与pgBouncer一起使用

msc*_*ivo 3 postgresql pgbouncer

在事务模式下使用 pgBouncer 似乎是在任何给定时间减少活动连接数量的最佳方式,但它也引起了一个我不确定如何有效解决的问题。

假设您希望在数据库级别将 statements_timeout 设为 5 分钟,只是为了安全地防止任何意外的超长时间运行查询,但有一群工作人员运行的语句通常需要比这更长的时间。如果没有 pgBouncer,您可以临时设置会话上的 statements_timeout 并将其设置回默认后记,一切正常。然而,当 pgBouncer 处于事务模式时,如果不将有问题的操作包装在事务中并设置本地 statements_timeout,则无法可靠地工作。但是,这也是不可取的,因为这样您就可以任意长时间运行事务来实现所需的超时设置。

在事务模式下使用 pgBouncer 时,有没有办法将本地超时应用于语句,但不必使用事务?

Lau*_*lbe 5

您可以SET LOCAL仅更改当前事务的参数:

BEGIN;
SET LOCAL statement_timeout = '1h';
SELECT /* long running query */;
COMMIT;
-- now statement_timeout is reset to the original value
Run Code Online (Sandbox Code Playgroud)