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.