Re: Adicionando nuevas columnas en production

From: "Carlos T(dot) Groero Carmona" <ctonetg(at)gmail(dot)com>
To: Alvaro Herrera <alvherre(at)2ndquadrant(dot)com>
Cc: Lista PostgreSql <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Adicionando nuevas columnas en production
Date: 2019-04-05 21:09:13
Message-ID: CABh6Tc3bR5bR5ZmRCigT43QEyWF08aquxv9QOZx_3sowbSOiNA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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 <alvherre(at)2ndquadrant(dot)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
>

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2019-04-05 21:19:13 Re: Adicionando nuevas columnas en production
Previous Message Alvaro Herrera 2019-04-05 18:32:24 Re: Adicionando nuevas columnas en production