pg中如何取消正在执行的存储过程

2021/07/06

如果存储过程执行过程,需要添加可以取消的功能,这里我们需要用到两个函数。

在函数中查询当前的 pid

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

根据 pid 取消当前进程

select pg_cancel_backend(13677);