Adicionando nuevas columnas en production

From: "Carlos T(dot) Groero Carmona" <ctonetg(at)gmail(dot)com>
To: Lista PostgreSql <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Adicionando nuevas columnas en production
Date: 2019-04-04 18:31:22
Message-ID: CABh6Tc0a5jQBHVkk=fotOw7_tnJPCqaNVfZb5EuZ+O=PCXG0YQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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.

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message gilberto.castillo 2019-04-04 18:40:39 Re: [MASSMAIL]Adicionando nuevas columnas en production
Previous Message Horacio Miranda 2019-04-03 17:54:09 Re: Consulta sobre usuarios de backup de Postgres