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 >