如何在Postgresql中终止空闲连接。

时间:2015-06-19 06:47:46

标签: postgresql

我正在使用java servlet和pgadmin 9.1.Problem是servlet中的连接没有正确关闭所以如果它达到最大连接就会导致空白屏幕。我不希望每个用户扩展最大连接数pgadmin ...我在servlet的开始和结束点使用了下面的查询,但由于管理员命令,它的显示错误如...连接终止..

ResultSet rs_1q=st_Query3.executeQuery("SELECT pg_terminate_backend(pg_stat_activity.procpid)FROM pg_stat_activity WHERE pg_stat_activity.current_query = '<IDLE>' AND procpid <> pg_backend_pid();");

2 个答案:

答案 0 :(得分:4)

SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'databasename' AND pid <> pg_backend_pid()  AND state in (  'idle');

答案 1 :(得分:2)

我不认为杀死连接是一种理想的解决方案,因为可能存在某些可能真正等待事务完成的连接。相反,我建议你为你的交易设置一个超时。

但是,如果你急于杀死空闲连接,那么你可以尝试这样:

使用shell脚本并执行"ps auxwww|grep 'idle in transaction'" 这将返回所有&#34;空闲的列表 。交易#&34;流程。 然后你可以使用&#34; awk&#34;找到每一行输出来得到 进程ID,最后您可以对每个进程使用"kill <pid>"