2013-08-16 2 views
0

... 8.3pl/pgsql 함수 내에서 셸 명령을 호출하려면 어떻게해야합니까?

업그레이드 죄송합니다, 옵션을 선택하지 않습니다 ...

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을을이 같은 일을하고 싶지만, 그것은 작동하지 않습니다

+1

다른 사람들이 PostgreSQL 9.3 이상을 사용하고있는 사람은 * https://dba.stackexchange.com/a/128254/104401 – Wildcard

답변

1

당신은 PL/pgSQL의에서 그것을 할 수 있지만 다른 치하의 대부분에서 할 수 있습니다

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.

또는 kill 함수를 SQL에 노출시키는 간단한 C 확장을 작성하십시오. 이 목적을 위해 문서의 예제를 적용하는 것은 매우 사소 할 것입니다.

+0

답변에 코드를 실행하려면 수퍼 유저 액세스가 필요합니까? – Stephan

+0

@Alex 물론. 수퍼 유저 권한없이 프로세스에 신호를 보내는 내장 된 방법이 있다면 그것은 괴물 같은 보안 구멍 일 것입니다. 데이터베이스에 * SECURITY DEFINER, REVOKE, PUBLIC에서 액세스 권한을 부여 할 수 있으며, 사용자 나 역할에만 권한을 부여 할 수 있습니다. 신호를 보낼 수 있기를 원합니다. –

2

무엇을 죽이려고합니까? 쿼리 또는 백엔드? 쿼리 만있는 경우 pg_cancel_backend()이 PostgreSQL 8.3에 존재합니다. 쉘 명령을 실제로 실행해야한다면 plperlu 나 plpythonu 같은 "신뢰할 수없는"절차 언어 중 하나를 사용해야합니다. 자세한 내용은 http://www.postgresql.org/docs/8.3/static/plperl-trusted.html을 참조하십시오.

+1

페이지를 참조하십시오. 'pg_terminate_backend'는하지 않았습니다. 정말로 원한다. –

관련 문제