0

我想做这样的事情,但它不起作用......

CREATE FUNCTION kill(integer) RETURNS integer AS $$
DECLARE
    pid ALIAS FOR $2;
BEGIN
    -- Do some stuff here...

    return kill TERM, pid;
END;
$$ LANGUAGE plpgsql;

PostgreSQL 8.3

升级不是一种选择,对不起...

4

2 回答 2

2

你想杀什么?查询还是后端?如果只是一个查询,那么 pg_cancel_backend()存在于 Postgresql 8.3 中。如果您确实需要执行 shell 命令,则需要使用“不受信任”的过程语言之一,例如 plperlu 或 plpythonu 等。请参阅http://www.postgresql.org/docs/8.3/static/plperl-trusted .html了解更多详情。

于 2013-08-16T16:51:04.080 回答
1

您不能在 PL/PgSQL 中执行此操作,但您可以在大多数其他 PL 中执行此操作:

CREATE LANGUAGE plperlu;

CREATE OR REPLACE FUNCTION signal(signum integer, pid integer) RETURNS integer AS $$
return kill $_[0], $_[1];
$$ LANGUAGE plperlu;

如果您愿意,也可以使用 PL/Python。甚至是PL/TCL。

或者,编写一个简单的 C 扩展以将kill函数公开给 SQL。为此目的调整文档中的示例将非常简单。

于 2013-08-17T16:43:57.393 回答