From: | gilberto(dot)castillo(at)etecsa(dot)cu |
---|---|
To: | "Carlos T(dot) Groero Carmona" <ctonetg(at)gmail(dot)com> |
Cc: | Lista PostgreSql <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: [MASSMAIL]Adicionando nuevas columnas en production |
Date: | 2019-04-04 18:40:39 |
Message-ID: | af4ed0b803eae8ad5a989b2b7d66c37d@etecsa.cu |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Hola,
Considera tu impacto, pero al final vas a tener que interrumpir el
servicio.
Tus ideas van por buen camino,
Crea la nueva tablas con las columnas nuevas y luego la pueblas.
Create table tabalanueva As select *,nuevacol1,nuevacol2, nuevacol3
from tablaVieja
Saludos,
Gilberto
El 2019-04-04 14:31, Carlos T. Groero Carmona escribió:
> Hola a todos,
>
> Necesito adicionar tres columnas a una tabla en mi base de datos de
> production ques 24/7.
> La tabla tiene unos 2.5 millones de registros, pero es muy concurrida,
> es decir, es una de las tablas en las cuales se esta escribiendo
> constantemente, por lo que es necesario evitar cualquier tipo de lock,
> o al menos que dure lo menos posible.
>
> 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
> c) no puedo hacer ning update hasta que el update no termine.
> Pero no confio mucho utilizando esta opction porque se que en el
> servidor de production con mayor carga de trabajo va a durar mucho mas
> tiempo.
>
> 2. Cree una function para poner todos los id de la tabla en un cursor
> y despues utilizarlos en la clausala where del update, sabia que seria
> lento pero imagine que quizas como estaba actualizando una tupla a la
> vez me dejaria escribir en la tabla, pero bueno estaba equivocado, no
> pude hacerlo y como se demoraba demaisado pues lo cancele. Probe hacer
> start transaction/commit pero no funciono.
>
> 3. Esta no la he probado, pero bueno es una opcion a considerar, y es
> crear una tabla_temp utilizando el mismo formato (create table like),
> ponerle las columnas y los valores por defecto de esas columnas, hacer
> un vacuum en la otra tabla y copiar los valores con insert/select y
> despues renombrar las tablas. lo malo que en lo que esa informacion se
> copia cualquier data que se actualizo despues de haber sido copiada,
> tendra que ser modificada nuevamente y entonces estaria bloqueando de
> todas maneras.
>
> Seguire probando, pero les agradeceria mucho si tiene alguna
> sugerencia.
>
> Saludos,
> Carlos.
From | Date | Subject | |
---|---|---|---|
Next Message | Alvaro Herrera | 2019-04-04 18:41:02 | Re: Adicionando nuevas columnas en production |
Previous Message | Carlos T. Groero Carmona | 2019-04-04 18:31:22 | Adicionando nuevas columnas en production |