是否可以限制 Postgres 服务器上的超时?

And*_*Gis 36 postgresql timeout

我在我的应用程序(客户端)中将连接和命令超时设置为 10 分钟。

比我的应用程序运行一个简单的查询: SELECT pg_sleep(65)

在某些服务器上它工作正常,但其他服务器在 60 秒后关闭连接。

这可能是某种限制超时并忽略我的客户端设置的 PostgreSQL 服务器配置吗?

Eva*_*oll 53

是的,有可能

在文档中提到的两个设置idle_in_transaction_session_timeout是新版本9.6x)

  • statement_timeout (整数)

    从命令从客户端到达服务器的时间开始,中止任何花费超过指定毫秒数的语句。如果 log_min_error_statement 设置为 ERROR 或更低,则也会记录超时的语句。零值(默认值)会关闭此功能。

    不建议在 postgresql.conf 中设置 statement_timeout,因为它会影响所有会话。

  • idle_in_transaction_session_timeout (整数)

    终止具有空闲时间超过指定持续时间(以毫秒为单位)的打开事务的任何会话。这允许释放该会话持有的任何锁并重用连接槽;它还允许清除仅对该事务可见的元组。有关这方面的更多详细信息,请参阅第 24.1 节。

    默认值 0 禁用此功能。

除非您想要消遣,否则不要statement_timeout在 postgresql.conf 中设置 ,这一点很重要。

这是它工作的一个例子

SET statement_timeout = 10000;
SET
test=# SELECT pg_sleep(15);
ERROR:  canceling statement due to statement timeout
Run Code Online (Sandbox Code Playgroud)


jja*_*nes 5

不是开箱即用的。不过,编译一个忽略您设置的自定义服务器会很容易。

但更有可能的是,您的连接被不喜欢空闲连接的防火墙或网关切断了。

如果您有权访问服务器的日志文件,那应该会提供一个很好的线索。如果客户端说服务器意外关闭了连接,而服务器说客户端意外关闭了连接,那么可能是客户端和服务器之间的某些东西实际上正在切断连接。