Hazlo por etapas. Añade la columna como nullable sin valor por defecto para que el cambio sea solo de metadatos, despliega código que la escriba en todos los caminos mientras sigue tolerando nulos, rellena en lotes pequeños con pausas para que los locks y la replicación se mantengan sanos, verifica que no queda ningún nulo, y después añade la restricción not null (validada aparte donde se pueda) y quita el código de respaldo. Nunca un solo ALTER bloqueante en una tabla de ese tamaño.
Por qué lo preguntan los entrevistadores
Esta es la migración de expandir y contraer, y separa a quien ha desplegado contra tablas grandes de quien no. Los entrevistadores quieren la secuencia de varios despliegues, que sepas que un ALTER ingenuo coge un lock y reescribe la tabla, el troceado en lotes para proteger las réplicas, y la disciplina de verificar antes de imponer. También sondea si tienes en cuenta los despliegues progresivos, donde el código viejo y el nuevo conviven.
Cómo estructurar tu respuesta
- Rechaza explícitamente la migración bloqueante de un solo paso.
- Expón la secuencia de expandir, rellenar y contraer.
- Explica el troceado en lotes y por qué protege a las réplicas.
- Ten en cuenta que el código viejo y el nuevo corren a la vez.
Ejemplo de respuesta
Lo que no voy a hacer es un solo ALTER que añada una columna not null con valor por defecto, porque en un motor antiguo eso reescribe la tabla entera bajo un lock exclusivo y el servicio está caído todo ese tiempo. Así que expando primero: la añado nullable, que en Postgres moderno es un cambio de metadatos y prácticamente instantáneo. Después despliego código que escribe la columna nueva en cada insert y update mientras sigue tolerando nulos en lectura, porque durante un despliegue progresivo los pods viejos y nuevos están vivos a la vez y no puedo asumir otra cosa. Después el relleno, en lotes de quizá diez mil filas ordenados por clave primaria con una pausa corta entre ellos, vigilando el retraso de replicación mientras corre y bajando el ritmo si sube. Cuando el conteo de nulos es cero añado la restricción, y en Postgres la añadiría como not valid y luego la validaría aparte para coger un lock más débil. El último despliegue quita el código de respaldo. Cada paso es reversible por separado.
¿Tienes esta entrevista a la vuelta de la esquina? GhostPilot escucha tu llamada en vivo, detecta la pregunta en cuanto la hacen y pone una respuesta estructurada en tu pantalla en tiempo real. Pruébalo en tu próxima entrevista de práctica, o coge un Session Pass de $29, sin suscripción, para la de verdad.
Mira cómo funcionaPreguntas de seguimiento que puedes esperar
- ¿Cómo revertirías una vez que ha empezado el relleno?
- ¿Y si el relleno necesita lógica de aplicación por fila?
- ¿En qué se diferenciaría esto en MySQL?
Más preguntas para Ingeniero de software
Tu entrevistador hará su propia versión de esta. Pega la descripción real del puesto en el Question Predictor gratuito y obtén las 20 preguntas que ese puesto tiene más probabilidades de hacerte, con lo que cada una busca en realidad.
Predecir mis preguntas