如何设置';等待超时';postgresql中的值与MySQL中的值相同?

如何设置';等待超时';postgresql中的值与MySQL中的值相同?,postgresql,timeout,Postgresql,Timeout,我使用的是Postgresql(9.6.3),我需要设置Wait\u timeout变量的值。但我找不到任何与此相关的答案,也找不到任何可以在Postgresql中代替MySQL中的wait_timeout变量使用的等效变量 long wait_time = 0; ResultSet rs = null; try { Statement st = con.createStatement(); rs = st.executeQuery(

我使用的是Postgresql(9.6.3),我需要设置Wait\u timeout变量的值。但我找不到任何与此相关的答案,也找不到任何可以在Postgresql中代替MySQL中的wait_timeout变量使用的等效变量

     long wait_time = 0;
     ResultSet rs = null;
     try {
        Statement st = con.createStatement();
        rs = st.executeQuery("show variables like 'wait_timeout'");
        if(rs.next())
            wait_time = rs.getLong("Value");
        rs.close();
    } catch (SQLException e) {
        logger.error(e);
    }        
// wait time in SQl is maintained in seconds whereas here we need 
milliseconds
     return (wait_time*1000)/2;

执行查询后,我在resultSet变量中获得空值。我发现了一个名为Statement_timeout的变量,但我不知道它是否等效,因为它可能会影响MySQL中as wait_timeout没有影响的所有其他会话。请给我一个更好的解决方案。提前感谢。

MySQL实现了很多超时()

MySQL有:

  • wait_timeout—服务器在关闭非交互连接之前等待非交互连接上的活动的秒数。默认值28800s=8小时
  • 类似的还有“interactive_timeout”——服务器在关闭交互连接之前等待活动的秒数
PostgreSQL目前有:

  • “statement_timeout”-从命令从客户机到达服务器时开始,中止任何超过指定毫秒数的语句
  • “空闲\u在\u事务\u会话\u超时”-使用空闲时间超过指定持续时间(毫秒)的打开事务终止任何会话
()

参见此处示例-


老实说,到目前为止,除了“connect\u timeout”之外,我不需要在MySQL中处理这些超时。所以我不能给你直接的建议。但也许“事务中的空闲会话超时”是您所需要的。

PostgreSQL中没有这样的超时。这有什么好处?@LaurenzAlbe如何处理需要开放式Postgres连接的长时间运行的CLI批处理程序。我的服务器不断断开我的客户端的连接,因为我的客户端将处于空闲状态。“空闲\u在\u事务\u会话\u超时”是否不会影响任何其他会话?因为“语句超时”可能会影响application@JosMac@Kishore您也可以仅为特定会话设置这些设置-请参见此处:我怀疑您需要的是空闲\u in\u事务\u会话\u超时。这仅在会话已启动事务且未提交或回滚时使用。如果没有活动事务,或者有活动事务且正在运行查询,则不会应用此超时。我有类似的情况。我有一个CLI脚本,我在其中构建了一个连接,该连接在等待代码的其他部分完成时通常处于空闲状态。然后我收到
OperationalError
,因为连接处于空闲状态,并且也没有事务。然后服务器关闭连接。尝试了各种超时设置,但均无效。服务器只是关闭了连接。奇怪的是,此功能没有作为配置参数公开。另一个混淆点是,psycopg2支持连接池,这似乎表明psycopg2可以维护长期运行的空闲连接(在其池中,或者可能在空闲连接退出时通过创建新连接来轮询或响应异常)。如果是这样,为什么我不能手动创建一个长期运行的空闲连接供自己使用。