El día 14 de abril de 2009 17:31, Alvaro Herrera
<[email protected]> escribió:
> Emanuel Calvo Franco escribió:
>
>> bastaria con corroborar que el parametro concuerde y que sea distinto
>> de pg_backend_pid().
>
> Justamente ... escribir la función completa es sólo un SMOP
>
> --
> Alvaro Herrera Developer, http://www.PostgreSQL.org/
> "Everybody understands Mickey Mouse. Few understand Hermann Hesse.
> Hardly anybody understands Einstein. And nobody understands Emperor Norton."
>
-- Esta función recibe como parámetro el numero del backend
-- que se desea matar.
create or replace function pg_terminate_backend_test(int) returns int
language plperlu security definer volatile as $$
$pid = shift;
my $myPid = spi_exec_query('select pg_backend_pid();');
if ($pid == $myPid->{rows}[0]->{pg_backend_pid}){
elog(WARNING, "Este pid pertenece al backend actual.");
return 1;
}
my $othersesions = spi_exec_query('SELECT procpid FROM pg_stat_activity
EXCEPT SELECT
pg_backend_pid()::int;');
my $numRows = $othersesions->{processed};
foreach my $rn (0 .. $numRows - 1) {
my $rs = $othersesions->{rows}[$rn];
if ($rs->{procpid} == $pid){
$ret = kill TERM, $pid;
elog WARNING, "could not send signal TERM to $pid: $!"
unless $ret == 1;
return $ret;
}
}
elog(WARNING, "Este pid no pertenece a un backend activo.");
return 1;
$$;
me quedó algo así... quizás le encuentre algo para modificar...
--
Emanuel Calvo Franco
Sumate al ARPUG !
(www.postgres-arg.org -
www.arpug.com.ar)
ArPUG / AOSUG Member
Postgresql Support & Admin
--
TIP 5: ¿Has leído nuestro extenso FAQ?
http://www.postgresql.org/docs/faqs.FAQ.html