当会话或请求不再存在时,停止(长时间)在PostgreSQL中运行SQL查询?

我不知道从哪里开始解决这个问题,但如果我有一个AJAX Web应用程序发送请求到服务器,并在数据库上运行长查询(postgresql在我的情况),有没有办法停止或杀死查询如果仍然在运行,用户刷新页面或closures会话…等?

停止查询:

SELECT pg_cancel_backend(procpid); 

要杀死数据库连接:

 SELECT pg_terminate_backend(procpid); 

要获得当前事务的概述,要获取程序ID:

 SELECT * FROM pg_stat_activity; 

http://www.postgresql.org/docs/current/interactive/functions-admin.html

考虑到你的psql被configuration为运行并连接到当前的开发数据库,​​在testing可以挂起的复杂查询时,这一个class轮便于开发,只需要杀死任何运行:

如果configuration不正确 – 为用户/密码/数据库添加标志

psql -c "SELECT procpid FROM pg_stat_activity;" -t | xargs -n1 -I {} psql -c "SELECT pg_cancel_backend({})"