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 13:41:07
Message-ID: CABh6Tc34n+jRCca9HFOaGmcpjPcqTdi3kUA+aQUc2Oot7_q-RQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Gracias por sus consejos,
Cree esta function y me deja escribir en la tabla miestras esta corriendo
asi que creo que me debe funcionar en production, solo que le tomo 9 horas
terminar jajaja con 47431 iteraciones

CREATE OR REPLACE FUNCTION addingcolumns6() RETURNS integer AS $$
DECLARE
i INTEGER := 0;
j INTEGER := max(id) from table_1;
flag boolean := true;
BEGIN
while flag LOOP
UPDATE table_1
set colum_1 = false,
colum_2 = false,
colum_3 = false
WHERE (id > (i*50) and id <((i+1)*50));
i:=i+1;
if i > j/50 then
flag := false;
end if;
END LOOP;
RETURN i;
END;
$$ LANGUAGE plpgsql

Cualquier propuesta de optimizacion en el codigo es bienvenida...

Saludos,

Carlos.

On Thu, Apr 4, 2019 at 1:41 PM Alvaro Herrera <alvherre(at)2ndquadrant(dot)com>
wrote:

> Carlos T. Groero Carmona escribió:
>
> > Una vez adicionada las tres columnas, estuve probando varias ideas y
> > posibilidades en un servidor de prueba que tengo, como:
> > 1. Correr un siemple update sin condiciones, es decir:
> > update table set col_1=false, col_2=false, col_3=false;
> > Resultados:
> > a) la consulta duro 33 segundos, durante ese tiempo
> > b) pude hacer select e incluso vacuum a la tabla, pero
>
> ¿no podrías hacer el gran update en varias partes, haciendo que cada una
> dure un par de segundos o así? "update ... where PK % 37 = X" donde X
> es cada valor entre 0 y 36. Así no bloqueas todos los updates, sino uno
> de cada 37, y además el bloqueo debería durar muy poco. (Escogí 37 sólo
> por ser el primer número primo mayor a 33, pero podrías escoger
> cualquier otro). Repite en una transacción separada por cada número.
> Sugerencia: espera entre cada update el tiempo suficiente para que la
> transacción más antigua haya terminado .. idealmente unos pocos
> segundos. Así el espacio producido por el update anterior puede
> reutilizarse para el siguiente (asume que no has creado índices en las
> columnas nuevas).
>
> --
> Á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 14:04:00 Re: Adicionando nuevas columnas en production
Previous Message Alvaro Herrera 2019-04-04 18:41:02 Re: Adicionando nuevas columnas en production