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
>
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 |