Tengo la siguiente funcion de actualizacion sobre una tabla muuuuuyyyy grande

CREATE OR REPLACE FUNCTION padrones.cargavectp()
  RETURNS void AS
$BODY$
declare
registro RECORD;
cuenta bigint;
terminar boolean;
begin
cuenta=0;
FOR registro IN SELECT * from padrones.personas where ((vectordatos is null) or 
(vectornombre is null)) LOOP 
  update padrones.personas set 
vectornombre=to_tsvector('spanish',coalesce(nombre,'')), 
vectordatos=to_tsvector('spanish',coalesce(datos,'')) 
    where clave=registro.clave;
  if registro.otrosnombres is not null then
    update padrones.personas set 
vectorotrosnombres=to_tsvector('spanish',coalesce(otrosnombres,'')) where 
clave=registro.clave;
  end if;
  cuenta=cuenta+1;  
  select public.basura.bandera into terminar from public.basura limit 1;
  if terminar=true then 
     raise notice 'ACTUALIZO %',cuenta;
     exit;
  end if; 
END LOOP; 
end;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE
  COST 100;
ALTER FUNCTION padrones.cargavectp() OWNER TO gferro;

Coo tarda muchisiimo, lo hice asi para poder pararla y luego reanuardarla, por 
eso no uso un simple update.
Existe alguna forma de acelerarla sin tener que perder la posibilidad de poder 
pararl/proseguir?


      Yahoo! Cocina
Recetas prácticas y comida saludable
http://ar.mujer.yahoo.com/cocina/
--
TIP 9: visita nuestro canal de IRC #postgresql-es en irc.freenode.net

Responder a