Desgraciadamente estoy usando postgres 9.3.

Solo he estado intentando utilizar el update que me sugeristes dentro de
una funcion con el objetivo de recorrer desde 0 hasta
numero_primo_seleccionado de manera automatica.
Intente hacer solo una funcion con el update y llamarla desde otra con un
ciclo que recorriera y pasara los valores pero tampoco funciono.
No me gustaria actualizar 62 mil registros de una vez (#primo = 37) en una
transaction porque posiblemente bloquearia el sistema completo.

Lo que quiero hacer es usar un numero primo alto como 10 007, actualizando
solo 230 valores a la vez (en una transaction) e incrementar X=0, X=1.....
X=10007 dinamicamente.

Todos los intentos hasta ahora han realizado el update en una sola
transaction. en vez de multiple transactiones.


On Fri, Apr 5, 2019, 1:32 PM Alvaro Herrera <alvhe...@2ndquadrant.com>
wrote:

> Carlos T. Groero Carmona escribió:
>
> > CREATE OR REPLACE FUNCTION addingcolumns7() RETURNS integer AS $$
> > DECLARE
> >     i INTEGER := 0;
> >     flag boolean := true;
> > BEGIN
> >     while flag LOOP
> >         UPDATE customers
> >               set colum_1 = false,
> >                       colum_1 = false,
> >                       colum_1 = false
> >         WHERE id%10007 = i ;
> >       i:=i+1;
> >       if i = 10007 then
> >         flag := false;
> >       end if;
> >      END LOOP;
> >  RETURN i;
> > END;
> > $$ LANGUAGE plpgsql
>
> Esto actualiza toda la tabla en una sola transacción, que niega todos
> los beneficios de la idea que te sugerí.  Bien podrías hacer un único
> update que modifique todos los registros ... sería lo mismo.
>
> Lo que yo sugiero es que cada update tiene que ir en su propia
> transacción.  Por lo tanto el ciclo no puede hacerse en plpgsql (a menos
> que estés usando postgres 11, donde podrías poner un COMMIT al terminar
> cada ciclo).
>
> --
> Álvaro Herrera                https://www.2ndQuadrant.com/
> PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
>

Reply via email to