Migración asistida de MySQL a PostgreSQL preservando claves primarias y restricciones
Por Kevin Marcondes · Publicado el · 7 min de lectura
Ofrecemos migración asistida de MySQL a PostgreSQL con foco en integridad: preservación de claves primarias, foreign keys, UNIQUE y CHECK. Mapeamos tipos, convertimos DDL con equivalencias correctas y validamos datos tras la carga. Cuando procede, planificamos una ventana mínima de corte con CDC y un plan pragmático de rollback.
Cuándo contratar la migración asistida y a quién va dirigida
Este servicio está pensado para equipos que necesitan mover datos críticos de MySQL a PostgreSQL sin perder integridad. Es habitual en escenarios que requieren auditoría estricta, informes fiables y el uso de funcionalidades avanzadas de PostgreSQL, como JSONB y restricciones expresivas.
Si no puedes arriesgarte a duplicar IDs, romper relaciones o aceptar datos inválidos, la migración orientada a la integridad —con preservación de claves primarias y restricciones— reduce riesgos y acelera el cambio con confianza.
Desafíos críticos que rompen la integridad entre MySQL y PostgreSQL
Las diferencias de tipos, collation, semántica de nulos, fechas “inválidas” y generación de IDs hacen que la migración sea sensible. A continuación, puntos comunes que afectan claves y restricciones —y que tratamos explícitamente en el mapeo y la validación.
| MySQL | PostgreSQL | Observación |
|---|---|---|
| AUTO_INCREMENT | GENERATED AS IDENTITY / SEQUENCE | Ajustar setval después de la carga para mantener la secuencia en la posición correcta. |
| TINYINT(1) | boolean | Mapear 0/1 a false/true sin perder la semántica. |
| ENUM | ENUM nativo o CHECK | Evitar valores fuera del dominio; documentar la decisión. |
| UNSIGNED | integer + CHECK | Recrear límites con CHECK para impedir negativos. |
| 0000-00-00 | Inválido | Normalizar marcadores a NULL o fechas válidas. |
| ON UPDATE CURRENT_TIMESTAMP | Trigger | Replicar la actualización automática de timestamps. |
| Collation case-insensitive | citext o collation adecuada | Preservar unicidad sin romper búsquedas por mayúsculas/minúsculas. |
| JSON | JSONB | Atención a la semántica y a los índices GIN. |
| `backticks` en identificadores | "aspas duplas" | Ajustar nombres y palabras reservadas en el DDL. |
Método de trabajo: del análisis al cutover seguro
Estructuramos la migración en etapas cortas y verificables, reduciendo acoplamientos y maximizando la visibilidad de riesgos.
- Descubrimiento e inventario: esquemas, tamaños, relaciones y datos problemáticos.
- Mapeo de tipos y restricciones: DDL objetivo con PK, FK, UNIQUE y CHECK equivalentes.
- Prueba de concepto: convertir un módulo o tabla crítica y medir impactos.
- Conversión del DDL: creación del esquema en PostgreSQL con nombres y collation decididos.
- Carga inicial: extracción, transformación y carga con logs reejecutables.
- Validación: conteos, muestreos determinísticos y comprobación de integridad referencial.
- Planificación del corte: ventana, secuencias, reconciliación final y rollback documentado.
Cómo preservamos claves primarias y restricciones en la práctica
Mantener los valores de las claves primarias evita roturas en integraciones que referencian IDs. Creamos las PK en PostgreSQL con el mismo conjunto de columnas y sincronizamos las secuencias (setval) tras la carga para que no haya colisiones en escrituras.
Las foreign keys se recrean con correspondencia exacta de columnas y cardinalidad. Cuando la carga masiva exige un orden específico, aplicamos FKs DEFERRABLE/INITIALLY DEFERRED y validamos posteriormente, garantizando consistencia sin aceptar datos inválidos.
Las restricciones UNIQUE y CHECK se traducen con el mismo propósito de negocio. Para dominios, evaluamos el uso de ENUM nativo o CHECK, priorizando claridad y facilidad de mantenimiento.
- PKs preservadas y secuencias sincronizadas.
- FKs revalidadas después de la carga, con informes de violaciones.
- UNIQUE/INDEX revisados para mantener claves naturales y compuestas.
- CHECKs para reemplazar UNSIGNED y reglas de negocio simples.
Validación, auditoría y pruebas automatizadas
La integridad se comprueba, no se asume. Automatizamos verificaciones de conteo, checksums por particiones, diffs por muestreo y consultas de integridad referencial. Esto reduce sorpresas en el corte y facilita auditorías futuras.
También estructuramos migrations y rollbacks con disciplina de versionado para reproducir entornos y revertir pasos cuando sea necesario. Consulta prácticas relacionadas en migraciones y rollbacks y en la guía de versionado de bases de datos.
- Conteos de filas y checksums por tabla/partición.
- Consultas para detectar huérfanos y duplicados.
- Validación de dominios (ENUM/CHECK) y nulos inesperados.
- Comparación determinística de muestras por clave primaria.
Ventanas, zero‑downtime y plan de rollback realista
Cuando la ventana de corte es reducida, evaluamos Change Data Capture (CDC) para mantener PostgreSQL actualizado durante la transición. Criterios: volumen de escritura, latencia aceptable y complejidad operacional. Más detalles en la guía de migración sin downtime con CDC.
Además, planificamos un rollback concreto: snapshots, checkpoints y procedimientos para volver rápidamente si hace falta. Las prácticas de recuperación también aprovechan recursos como point‑in‑time recovery; un tema relacionado está en recuperar una tabla vía PITR.
Entregables del proyecto y siguientes pasos
Recibirás artefactos que soportan la migración y la operación futura. El paquete se ajusta al alcance y a los riesgos identificados, sin promesas irreales sobre plazos o resultados.
- Plan de migración con mapeos y decisiones técnicas.
- Scripts DDL/DML reejecutables y documentados.
- Informes de validación e integridad post‑carga.
- Playbook de cutover y rollback, paso a paso.
- Checklist operativo para producción y monitorización inicial.
- Opcional: recomendaciones de rendimiento post‑migración; consulta tuning PostgreSQL para ERPs.
Preguntas frecuentes
¿Es posible migrar sin downtime?
Depende del volumen y de las integraciones. En escenarios con ventana mínima, evaluamos CDC para sincronizar los cambios hasta el corte. Aun así, planificamos una ventana corta para el switch final y un rollback preparado por si aparece algo inesperado.
¿Qué pasa con AUTO_INCREMENT y los IDs actuales?
Preservamos los valores existentes de las claves primarias. Tras la carga, sincronizamos la secuencia en PostgreSQL (setval) para que los nuevos inserts no colisionen. También verificamos las referencias foráneas para garantizar consistencia.
¿Cómo tratar datos inválidos como 0000-00-00 o cadenas fuera de rango?
Normalizamos esos datos antes de la carga, definiendo reglas claras: corregir, sustituir por NULL cuando proceda o rechazar registros inconsistentes. Las restricciones en PostgreSQL ayudan a prevenir la reintroducción de valores inválidos.
¿Se migran automáticamente triggers, procedures y views de MySQL?
No. La lógica debe revisarse y, cuando sea necesario, reescribirse en PL/pgSQL u otra solución equivalente. Evaluamos caso por caso y priorizamos conservar la lógica de negocio con el menor impacto posible.
¿Cómo estimar plazo y coste de la migración?
Varía según el alcance: tamaño de las bases, número de integraciones, calidad de los datos, volumen de escritura y tolerancia a downtime. Empezamos con un análisis del escenario para dimensionar esfuerzo, riesgos y plan de ejecución.
¿Puedo operar MySQL y PostgreSQL en paralelo por un tiempo?
Sí, con replicación vía CDC o estrategias de dual‑write cuidadosamente controladas. Esto reduce el riesgo en el corte, pero aumenta la complejidad operativa. Evaluamos pros y contras para tu contexto.
¿Evaluamos tu migración MySQL → PostgreSQL?
Cuéntanos tu contexto, restricciones de downtime y riesgos de integridad. Recibe un plan de migración a medida, con validaciones y rollback claros.
Hablar sobre la migraciónVer también
- Backups incrementales cifrados en S3 para VPS
- Servicio: hardening y tuning de PostgreSQL para ERPs con informes pesados
- Servicio de refactorización y desacoplamiento de monolitos PHP con entregas incrementales y pruebas automáticas
- Servicio de hardening, backup y monitorización para servidores Linux en VPS