PostgreSQL存储过程执行中对数据库的更改不会提交到数据库。咱们想要了解存储过程执行的状态能够用RAISE语句。 RAISE语句能够输出存储过程运行中的消息或者错误。 用法以下: www.postgresql.org/docs/curren…javascript
RAISE [ level ] 'format' [, expression [, ... ]] [ USING option = expression [, ... ] ];
RAISE [ level ] condition_name [ USING option = expression [, ... ] ];
RAISE [ level ] SQLSTATE 'sqlstate' [ USING option = expression [, ... ] ];
RAISE [ level ] USING option = expression [, ... ];
RAISE ;
复制代码
这个比较简单,咱们只须要在程序外部捕获sql返回的 消息并更新到数据库中便可html
node中的实现java
const pool = new Pg.Pool(Config.db);
pool.on('connect', (cl) => {
cl.on('notice', (msg)=> {
//获取sql抛出的信息
<!--此处能够执行更新进度等操做-->
});
});
复制代码
关闭正在运行中的存储过程,咱们须要用到两个函数。node
pg_backend_pid
: 查询当前会话的服务器进程的进程ID,pg_cancel_backend(pid int)
: 取消后端的当前查询。若是调用角色是其后端被取消或已授予调用角色的角色的成员,则也容许这样作pg_signal_backend,可是只有超级用户能够取消超级用户后端。create or replace function pg_cancel_backend()
returns void
as $$
declare
backend_pid bigint;
begin
--查询当前pid
backend_pid = pg_backend_pid();
loop
raise notice '%', format('%1$s : backend_pid: %2$s', now(),backend_pid);
perform pg_sleep(2);
end loop;
end;
$$ language plpgsql;
-- 2019-07-25 03:47:30.783608+00 : backend_pid: 13677
复制代码
select pg_cancel_backend(13677);
复制代码