Plan de migración de base de datos sin downtime (expandir y contraer)

Planifica un cambio de esquema en producción sin cortar el servicio: fases expandir, migrar y contraer, backfill por lotes, verificación y marcha atrás en cada paso. Pensado para ChatGPT, Claude, Gemini y Microsoft Copilot. Incluye 5 variables personalizables y se copia gratis en un clic.

Avanzado · Código · Pendiente de revisión editorial

Prompt

Actúa como ingeniero de bases de datos con experiencia en migraciones en producción sin interrupción del servicio.

Cambio que quiero hacer: {{cambio}}
- Motor y versión: {{motor}}
- Tamaño de las tablas afectadas y carga: {{volumen}}
- Cómo se despliega la aplicación: {{despliegue}}
- Herramienta de migraciones: {{herramienta}}

Entregables:
1. Análisis de riesgos: qué sentencias bloquean la tabla o la reescriben en este motor y versión, y cuánto tiempo podrían bloquearla con este volumen (en términos cualitativos si no hay datos).
2. Plan por fases con el patrón expandir y contraer. Para cada fase: SQL exacto, cambios en el código de la aplicación, en qué despliegue va y condición para pasar a la siguiente.
   - Expandir: añadir columnas, tablas o índices sin romper la versión anterior del código (sin bloqueos largos, índices concurrentes si el motor lo permite).
   - Doble escritura o sincronización temporal entre estructura antigua y nueva.
   - Backfill por lotes: script idempotente, tamaño de lote, pausas, reanudable si se corta y cómo medir el avance.
   - Cambiar las lecturas a la nueva estructura.
   - Contraer: eliminar lo antiguo solo cuando ya no lo use nada.
3. Consultas de verificación para confirmar que los datos antiguos y nuevos coinciden.
4. Plan de marcha atrás para cada fase y punto a partir del cual ya no es trivial volver.
5. Qué vigilar durante la migración (bloqueos, replicación, latencia, errores) y cuándo pararla.
6. Lista de comprobación final para el día del cambio.

Restricciones:
- Asume que durante unos minutos convivirán dos versiones del código, salvo que te diga lo contrario.
- No inventes nombres de tablas ni columnas: usa los que te doy o [COMPLETAR].
- Si falta información crítica (por ejemplo, si hay réplicas o claves foráneas), pregúntame primero.
- Recomienda ensayar el plan completo en un entorno de pruebas con una copia de datos realista.

Cómo usarlo

  1. Describe el cambio con los nombres reales de tablas y columnas.
  2. Indica cómo despliegas (rolling, blue-green, una sola instancia) y qué herramienta de migraciones usas.
  3. Ensaya todas las fases en un entorno de pruebas antes de tocar producción.
  4. Guarda el plan junto al ticket del cambio para tener a mano la marcha atrás.

Ejemplo de uso

Cambio: dividir clientes.nombre_completo en nombre y apellidos · PostgreSQL 15 · 8 millones de filas · Despliegue rolling en Kubernetes · Alembic.

Resultado de ejemplo

1. Riesgo

En PostgreSQL 15, ADD COLUMN sin valor por defecto solo toca el catálogo, pero necesita un bloqueo ACCESS EXCLUSIVE breve: si hay una consulta larga delante, todas las escrituras se quedan en cola. Por eso usamos lock_timeout.

2. Plan por fases

FaseDespliegueAvanzar cuando…
ExpandirNColumnas creadas sin errores
Doble escrituraN+1Las 4 réplicas escriben ambas estructuras
BackfillScript0 filas pendientes
Lecturas nuevasN+2Consultas de verificación a 0
ContraerN+3Ningún código lee nombre_completo
-- Fase 1: expandir (falla rápido en vez de bloquear la tabla)
SET lock_timeout = '2s';
ALTER TABLE clientes
    ADD COLUMN nombre text,
    ADD COLUMN apellidos text;

-- Fase 3: backfill por lotes, idempotente y reanudable por id
UPDATE clientes
SET nombre    = split_part(nombre_completo, ' ', 1),
    apellidos = NULLIF(substr(nombre_completo,
                  length(split_part(nombre_completo, ' ', 1)) + 2), '')
WHERE id > :ultimo_id AND id <= :ultimo_id + 5000
  AND nombre IS NULL;

Ojo: la regla de división es [COMPLETAR]. Con nombres compuestos («María José») o dos apellidos, separar por el primer espacio falla; revisa una muestra antes de lanzar el backfill…

Datos clave

Categoría
Programación y desarrollo · SQL
Tipo de resultado
Código
Nivel
Avanzado
Pensado para
ChatGPT, Claude, Gemini y Microsoft Copilot
Verificado en
Pendiente de verificación editorial
Variables
Cambio de esquema, Motor y versión, Volumen y carga, Forma de despliegue y Herramienta de migraciones
Idioma
Español
Precio
Gratis, sin registro
Actualizado
07/11/2026

Preguntas frecuentes

¿Qué es el patrón expandir y contraer?

Es hacer un cambio incompatible en varios pasos compatibles: primero añades lo nuevo sin quitar lo viejo, migras datos y lecturas, y solo al final eliminas lo antiguo. Así cada despliegue funciona con la versión anterior del código.

¿Por qué hacer el backfill por lotes y no con un único UPDATE?

Un UPDATE masivo puede bloquear filas mucho tiempo, generar un gran volumen de log y retrasar las réplicas. Los lotes pequeños y reanudables reducen ese impacto y permiten parar si algo va mal.

¿Para qué sirve este prompt?

Planifica un cambio de esquema en producción sin cortar el servicio: fases expandir, migrar y contraer, backfill por lotes, verificación y marcha atrás en cada paso.

¿Con qué herramientas de IA funciona?

Está pensado para ChatGPT, Claude, Gemini y Microsoft Copilot. Todavía no lo hemos verificado en estas herramientas, por lo que los resultados pueden variar entre ellas.

¿Cómo personalizo el prompt?

Pulsa «Personalizar» y rellena las variables (Cambio de esquema, Motor y versión, Volumen y carga, Forma de despliegue y Herramienta de migraciones). El texto se actualiza al instante y después puedes copiarlo con un clic. Los valores se guardan solo en tu navegador.

¿Necesito experiencia para usarlo?

Es de nivel avanzado: está pensado para personas con experiencia en el tema que sepan evaluar y ajustar el resultado.

¿Este prompt es gratis?

Sí. Todos los prompts de HomeCasa Prompts son gratuitos, sin registro ni suscripción. Puedes usarlos también en proyectos profesionales.

¿Puedo fiarme del resultado de la IA?

Úsalo como un borrador de calidad: revisa siempre datos, cifras y afirmaciones importantes antes de publicarlos o tomar decisiones.

Prompts relacionados