如何在pl / pgsql函数中调用shell命令?

时间:2013-08-16 16:45:59

标签: postgresql shell postgresql-8.3

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

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

UPGRADING不是一个选项,抱歉......

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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。为此目的修改文档中的示例将非常简单。