##ある日
いつものようにPostgreSQLに接続しようとしたらこんなエラーが出た。
FATAL: sorry, too many clients already
??
謝られるようなことはしていないはずだ。
調べるとクライアントがDBの設定を超過しているらしい…。
ここでまた疑問。
自分がテストで使っているだけなのでそんなことになるはずがないのだ。
一応select * from pg_stat_activity;
で調べてみる。
1234 datname.hoge 0000 postgres 000.000.0.000 2020/1/29 00:00
1234 datname.hoge 0000 postgres 000.000.0.000 2020/1/29 00:00
1234 datname.hoge 0000 postgres 000.000.0.000 2020/1/29 00:00
... 以下100件
うん…使ってたねごめんね。こっちがsorryって感じだね。
原因としては。使っているサーバサイドのJavaのプログラムでDB接続を連続で行う場合
db.java
try {
Class.forName("org.postgresql.Driver");
conn = DriverManager.getConnection(DBURL, user, password);
Statement stmt = conn.createStatement();
String sql = "1つ目のSQL文";
ResultSet rs = stmt.executeQuery(sql);
rs.close();
stmt.close();
}catch (SQLException e){
}catch (Exception e){
}
try {
Class.forName("org.postgresql.Driver");
conn = DriverManager.getConnection(DBURL, user, password);
Statement stmt = conn.createStatement();
String sql = "2つ目のSQL文";
ResultSet rs = stmt.executeQuery(sql);
rs.close();
stmt.close();
}catch (SQLException e){
}catch (Exception e){
}finally{
try{
if (conn != null){
conn.close();
}
}catch (SQLException e){
// 例外処理
}
}
って感じで最後にcloseしてただけなんだけど毎回しなきゃだめだよね。
当たり前だよねってお話でした。あほすぎる。