当会话或请求不再存在时,停止(长时间)在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({})"