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 <alvhe...@2ndquadrant.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 >