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

Responder a