CREATE FUNCTION foo()
RETURNS void
AS $$
$SIG{INT} = $SIG{TERM} = sub { die; };
while(1) {}
$$ LANGUAGE plperl;
然后我跑了
SESSION 1 SESSION 2
SELECT pg_backend_pid();
pg_backend_pid
----------------
20465
SELECT * FROM foo();
-- LOOPING
pg_terminate_backend(20465);
ERROR: Died at line 2.
CONTEXT: PL/Perl function "foo"
你是对的,
调用后
pg_terminate_backend
,pg_cancel_backend
plperl 后端仍然存在。似乎是他们已经知道的一个错误,从 Tom Lane 说的列表中,我不确定他们是否有解决方案。来自 Craig Ringer,
他甚至解释了一些可能导致挂起的选项。
无论如何,让我们尝试一下
然后我跑了
如果可以的话,这似乎可行。