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

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

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

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

评论

要查看当前超时:SHOW statement_timeout;

#1 楼

是的,有可能

文档中提到了两个设置(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禁用此功能。




重要的是不要在postgresql.conf,除非您不想娱乐。

以下是它正常工作的一个示例

评论


配置文件中都不存在任何设置,因此我使用的是默认设置。 :(还有其他想法吗?

– Andrzej Gis
17年2月16日在12:39

@gisek可以肯定,这可能是网络级别的,无论是在本地IP堆栈中还是在防火墙中。

–埃文·卡洛尔(Evan Carroll)
17年2月20日在23:17

#2 楼

并非开箱即用。但是,编译忽略了您的设置的自定义服务器非常容易。 br />
如果您有权访问服务器的日志文件,那应该是一个很好的线索。如果客户端说服务器意外关闭了连接,而服务器说客户端意外关闭了连接,则可能是客户端和服务器之间确实切断了连接。

评论


绝对不是定制的编译服务器-只是apt-get中的常规内容。您能否详细说明一下防火墙和网关的引线?如何验证和修复它?

– Andrzej Gis
17年2月15日在16:24

#3 楼

是可以。
需要设置一些连接参数。

请参考以下链接。
https://jdbc.postgresql.org/documentation/head /connect.html

loginTimeout
connectTimeout
socketTimeout
cancelSignalTimeout

评论


这些是数据库连接客户端的设置,而不是可以在服务器上配置为断开客户端连接的设置。 OP正在寻找服务器端连接超时设置。

– John K. N.
18年8月3日在6:24