Re: [MASSMAIL]Adicionando nuevas columnas en production

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.

In response to

Browse pgsql-es-ayuda by date

  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