2017-05-04 69 views
0

我正在使用Java和Node Js的紅移。幾次以前發現斷開事件不是在所有關閉連接調用中創建的。 的Java(使用redshift.jdbc41):Redshift連接沒有以正確的方式關閉

Connection conn = null; 
Statement stmt = null; 
try { 
     ... 
} catch (Exception ex){ 
    throw new Exception("Can't sync raw data from redshift"); 
}finally { 
    try { 
     if (stmt != null) { 
      stmt.close(); 
     } 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
    try { 
     if (conn != null) { 
      conn.close(); 
     } 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
} 

和節點JS(使用PG模塊)例如:

var client = new pg.Client(conString); 
client.connect(function (err) { 
    if (err) throw err; 
    client.query(query, function (err, result) { 
     client.end(function (err) {if (err) throw err;}); 
     ... 
    }); 
}); 

所以正在執行的查詢稱爲碼關閉連接後,但在stl_connection_log部分連接僅創建啓動會話事件,但沒有斷開會話,所以很多連接在幾天內保持活動狀態,並且在客戶端應用程序停止後不會重置。

有人可以建議如何解決這個問題?可能需要一些配置用於紅移或其他客戶端應用程序的工作方式?

+0

您可以在連接字符串中設置idleTimeoutMillis:。 –

回答

0

你提到的Node Js代碼對我來說工作得很好。如果您想通過紅移強制關閉連接,可以使用下面的查詢。

select pg_terminate_backend (pg_backend_pid()); 

如果我做了一個壞的假設,請評論,我會重新調整我的答案。

相關問題