代码之家  ›  专栏  ›  技术社区  ›  Kenny Shen

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

  •  49
  • Kenny Shen  · 技术社区  · 14 年前

    我不确定从哪里开始解决这个问题,但是如果我有一个Ajax Web应用程序向服务器发送请求并在数据库上运行长查询(在我的例子中是PostgreSQL),有没有一种方法可以停止或终止查询,如果在运行时,用户刷新页面或关闭会话…等等?

    2 回复  |  直到 6 年前
        1
  •  83
  •   mlissner    11 年前

    要停止查询,请执行以下操作:

    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

        2
  •  4
  •   David Ferenczy Rogožan Hugo L.M    9 年前

    考虑到您的psql被配置为运行并连接到当前的dev数据库,当测试可以挂起的复杂查询时,这个一行程序在开发中非常方便,它可以终止任何运行:

    如果配置不正确-为用户/密码/数据库添加标志

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