Environment Merge
La función Environment Merge te permite aplicar cambios de esquema de un entorno (fuente) a otro (destino). Esta es la operación central que propaga cambios estructurales — como nuevas tablas, columnas, vistas y enums — a través de tu ciclo de vida de desarrollo.
Cómo funciona el Merge
Sección titulada «Cómo funciona el Merge»El proceso de merge está diseñado para ser seguro, predecible y transparente:
- Selección: Selecciona un entorno fuente (donde se originaron los cambios) y un entorno destino (donde quieres aplicarlos).
- Análisis: El sistema realiza un diff para identificar todos los cambios faltantes en el entorno destino.
- Revisión y Cherry-pick: Revisa los cambios detectados y elige selectivamente cuáles aplicar.
- Copia de seguridad automática: Antes de aplicar cualquier cambio, Archie Core crea una copia de seguridad completa de los datos y estructura del entorno destino.
- Aplicación atómica: Los cambios seleccionados se aplican como una sola operación. Si cualquier parte del merge falla, toda la operación se revierte automáticamente.
Seguridad y confiabilidad
Sección titulada «Seguridad y confiabilidad»Archie Core garantiza la integridad de tus entornos de producción y staging durante un merge:
- Actualizaciones transaccionales: Todos los cambios de esquema se aplican dentro de una sola transacción. Esto significa que o todos los cambios seleccionados se aplican correctamente, o ninguno — evitando que tu base de datos entre en un estado de migración parcial.
- Bloqueo de entorno: Mientras un merge está en progreso, el entorno destino se bloquea para prevenir cambios de configuración concurrentes.
- Copias de seguridad pre-merge automáticas: Siempre se crea una copia de seguridad de “red de seguridad” inmediatamente antes de la ejecución. Si un merge tiene éxito pero descubres un problema después, puedes restaurar al estado exacto antes del merge usando la página Backups.
Selección Cherry-Pick
Sección titulada «Selección Cherry-Pick»La interfaz de merge permite control granular sobre qué se mueve:
- Selección individual: Activa o desactiva cambios específicos (como la adición de una columna o un nuevo índice) sin fusionar toda la rama.
- Acciones de grupo: Selecciona o deselecciona rápidamente todos los cambios relacionados con una tabla o vista específica.
- Protección contra cambios rompientes: Las operaciones destructivas (como eliminar una columna) no están preseleccionadas por defecto. Debes optar explícitamente por estos cambios para prevenir pérdida accidental de datos.
Historial de migraciones
Sección titulada «Historial de migraciones»Cada operación de merge se registra en un registro de auditoría centralizado. La página Historial de un entorno muestra:
- Registro de auditoría: Quién inició el merge, qué entornos estuvieron involucrados y cuándo ocurrió.
- Resumen de cambios: Un desglose claro de qué se creó, modificó o eliminó.
- Trazabilidad: Documentación de los comandos SQL específicos ejecutados durante la migración.
- Enlace a backup: Acceso directo a la copia de seguridad automática creada específicamente para esa migración.
Política de rollback
Sección titulada «Política de rollback»Si necesitas revertir un merge, debes usar la página Backups para restaurar el entorno a su estado “Pre-merge”.
Nota: A diferencia de un simple deshacer, una operación de restauración revierte toda la base de datos a un punto anterior en el tiempo. Recomendamos verificar los cambios en un entorno de staging antes de fusionar en producción.
API para desarrolladores (GraphQL)
Sección titulada «API para desarrolladores (GraphQL)»Mutation: mergeEnvironments
Sección titulada «Mutation: mergeEnvironments»mutation MergeEnvironments($input: MergeEnvironmentInput!) { mergeEnvironments(input: $input) { success message migrationId changesApplied backupId }}Query: migrationHistory
Sección titulada «Query: migrationHistory»query MigrationHistory($projectId: ID!, $environment: String) { migrationHistory(projectId: $projectId, environment: $environment) { id sourceEnvironment targetEnvironment status appliedBy appliedAt changes { changeType objectName sql isBreaking } backupId }}