Saltar al contenido

Migraciones de datos

Ejecuta una migración de datos concreta incluida en una versión.

Cómo funciona

Algunos cambios no se pueden expresar en SQL: reescribir el contenido de los eventos a un nuevo formato binario, normalizar datos heredados, volver a calcular campos derivados. Cada uno de esos cambios se incluye en la aplicación como una migración programada: una tarea de migración.

Ejecutas una tarea de migración cada vez, por su nombre. A propósito, no existe un modo de «ejecutarlo todo»: pasar todas las migraciones a la vez no tiene límites y afecta a todos los espacios de trabajo, y antes bastaba con dejar un campo del formulario en blanco para hacerlo. El campo Tarea es obligatorio y su desplegable muestra exactamente las tareas de migración que registra la versión desplegada.

Después, una ejecución:

  1. Muestra una vista previa por defecto: con Aplicar desactivado, la tarea informa de lo que cambiaría sin escribir nada. Lee primero la vista previa; para eso está
  2. Solo escribe cuando lo indicas: activa Aplicar para guardar los cambios. El formulario te obliga a marcar Entiendo que esto escribe cambios que no se pueden revertir antes de enviarlo, porque aplicar escribe en todos los espacios de trabajo del ámbito y no se puede revertir
  3. Reconstruye proyecciones si hace falta: una tarea cuyos cambios tienen que recoger las proyecciones lo solicita como paso posterior. Cuando termina la ejecución, se programa Reconstruir proyecciones de empleados como una ejecución nueva. Aparece en la lista de ejecuciones de tareas como una entrada aparte, que solo empieza cuando ha terminado la ejecución de las migraciones

Cuándo se ejecuta

La tarea la lanza un operador. Nunca empieza por sí sola: ni de forma programada ni al arrancar la aplicación. Lánzala cuando haga falta una migración, desde Administración › Ejecuciones de tareas. Solo se puede ejecutar desde el espacio de trabajo del sistema y no aparece en ningún otro espacio de trabajo.

No empieza automáticamente porque entonces cada copia en ejecución de la aplicación pondría en cola su propia ejecución, y varias ejecuciones que cambian los mismos datos a la vez ralentizan la base de datos.

Parámetros

ParámetroObligatorioSignificado
TareaSíLa migración que se va a ejecutar, elegida entre las tareas registradas. Una ejecución que no indica ninguna tarea se rechaza antes de empezar, igual que un nombre que no está registrado
Aplicar (por defecto false = simulación en las migraciones que la admiten)NoDesactivado (por defecto), muestra una vista previa sin escribir, en las tareas que admiten simulación; las tareas que siempre aplican lo ignoran. Activado, guarda los cambios, que no se pueden deshacer
Empleado (opcional, limita una migración con ámbito a un empleado)NoLimita una tarea a un solo empleado; útil para probarla con un empleado antes de ejecutarla para todos. Las tareas que siempre lo cubren todo lo ignoran

La API programática acepta las mismas opciones, más workspace_id para limitar una tarea con ámbito a un espacio de trabajo; el formulario de lanzamiento no tiene selector de espacio de trabajo.

{"jobs":["migrations"],"options":{"tasks":["<task-name>"]}}
{"jobs":["migrations"],"options":{"tasks":["<task-name>"],"apply":true}}

Las opciones con las que se lanzó una ejecución se muestran en la columna Parámetros de la lista de ejecuciones, que está oculta por defecto: actívala desde el menú de columnas para distinguir dos ejecuciones de la misma tarea.

Resultados de la tarea

El resultado incluye dry_run (lo contrario de Aplicar) y una clave por cada tarea de migración ejecutada:

ClaveSignificado
dry_runtrue cuando no se ha escrito nada: la ejecución solo era una vista previa
appliedSi esta tarea ha escrito realmente sus cambios
affected_countCuántas entidades ha tocado la tarea, o tocaría
by_workspaceRecuentos por espacio de trabajo, con los nombres de los espacios de trabajo
detailsLas entidades afectadas, con el detalle de antes y después que registre la tarea

Un nombre que no es una tarea registrada aparece como "unknown task" junto a ese nombre.

Cuando se ejecuta una tarea marcada como «reconstruye proyecciones», el resultado también incluye next_jobs: ["rebuild-employee-projections"] y esa tarea se programa automáticamente.

Volver a ejecutar

Todas las tareas registradas se pueden volver a ejecutar cuando quieras. Cada tarea deja fuera los datos que ya se han migrado, así que volver a ejecutarla tras un éxito parcial continúa donde lo dejó la ejecución anterior, y volver a ejecutar una tarea terminada no cambia nada y no informa de nada afectado.

Solución de problemas

ProblemaSolución
«No se ha seleccionado ninguna tarea»Elige una tarea en el campo Tarea. No existe un modo de ejecutarlo todo: indicar la tarea es la única forma de ejecutar esta tarea
La ejecución informa de "unknown task"El nombre no está registrado en la versión desplegada; casi siempre es una tarea que ya se ha retirado. Elígela en el desplegable en lugar de escribir un nombre
Ejecutar tarea sigue desactivadoAplicar está activado y no se ha marcado la confirmación que hay debajo. Lee el aviso y marca la casilla, o vuelve a desactivar Aplicar para ver una vista previa
affected_count es 0La tarea no tiene filas pendientes: es el estado normal una vez terminada
Errores durante una tareaAbre los detalles de la ejecución. Los errores por fila se muestran; que falle toda la ejecución suele indicar una condición grave. Corrige los datos y vuelve a ejecutarla
No se ha ejecutado la reconstrucción de proyecciones posteriorSi la ejecución no terminó (falló a medias), el paso posterior no se programa. Corrige el fallo, vuelve a ejecutar la tarea y, si hace falta, vuelve a ejecutar manualmente Reconstruir proyecciones de empleados