PostgreSQL关闭JDBC客户端链接无法彻底关闭服务端后台的查询请求
找到方法了, 可以直接在客户端管理这类异常/超时的查询。
1、直接从客户端获取当前连接的进程id客户端新建jdbc连接conn时,通过执行以下sql获取该链接的后台进程pid:select procpid, start, S.client_host, S.client_port, now() - start as lap, current_queryfrom (
select backendid, pg_stat_get_backend_pid(S.backendid) as procpid,
pg_stat_get_backend_activity_start(S.backendid) as start,
pg_stat_get_backend_client_addr(S.backendid) as client_host,
pg_stat_get_backend_client_port(S.backendid) as client_port,
pg_stat_get_backend_activity(S.backendid) as current_query
from
(select pg_stat_get_backend_idset() as backendid) as S
) as S,( select inet_client_addr() as client_host, inet_client_port() as client_port ) as client where client.client_host = S.client_host and client.client_port = S.client_port;
2、客户端连接池管理线程记录connpid的对应关系
3、当客户端发现该连接conn异常/超时后,结合digoal回答的关闭查询pid的方法,将该pid上的查询关闭。pg_cancel_backend(pid)
赞0
踩0