Plan de Migración PostgreSQL 16 → 18
Plan de Migración PostgreSQL 16 → 18
Estado: ✅ Completado (04-04-2026) Downtime estimado: ~15 minutos Riesgo: Bajo (backup previo + volumen viejo preservado)
Pre-requisitos
- Backup diario pg_dump verificado (cron ya activo en producción)
- Acceso SSH a
root@crearack.com - Ventana de mantenimiento acordada
Pasos
1. Backup manual previo (seguridad extra)
ssh root@crearack.com
docker exec crearack-pro-zcmvsl-db-1 pg_dump -U crearack_user -d crearack_pro -F c -f /tmp/pre_migration_backup.dump
docker cp crearack-pro-zcmvsl-db-1:/tmp/pre_migration_backup.dump /root/pre_migration_backup.dump
2. Parar servicios (inicio downtime)
docker stop crearack-pro-zcmvsl-web-1 crearack-pro-zcmvsl-worker-1
3. Dump completo con PG 16
docker exec crearack-pro-zcmvsl-db-1 pg_dump -U crearack_user -d crearack_pro -F c -f /tmp/full_dump.dump
docker cp crearack-pro-zcmvsl-db-1:/tmp/full_dump.dump /root/full_dump.dump
4. Parar y renombrar volumen DB
docker stop crearack-pro-zcmvsl-db-1
docker volume create pg_data_prod_pg16_backup
# No se puede renombrar volúmenes Docker, pero preservamos el viejo
5. Actualizar compose.prod.yml
Cambiar en compose.prod.yml:
image: postgres:18-alpine
6. Crear nuevo contenedor con PG 18
# Dokploy redesplegará, o manualmente:
docker compose -f compose.prod.yml up -d db
# Esto crea un volumen nuevo con PG 18 inicializado
7. Restaurar datos
docker cp /root/full_dump.dump crearack-pro-zcmvsl-db-1:/tmp/full_dump.dump
docker exec crearack-pro-zcmvsl-db-1 pg_restore -U crearack_user -d crearack_pro --clean --if-exists -F c /tmp/full_dump.dump
8. Re-aplicar RLS policies
docker exec crearack-pro-zcmvsl-web-1 python manage.py migrate
9. Arrancar servicios (fin downtime)
docker start crearack-pro-zcmvsl-web-1 crearack-pro-zcmvsl-worker-1
10. Verificar
curl https://crearack.com/alive
docker exec crearack-pro-zcmvsl-db-1 psql -U crearack_user -d crearack_pro -c "SELECT version();"
# Debe mostrar PostgreSQL 18.x
Rollback (si algo falla)
- Revertir
compose.prod.ymlapostgres:16-alpine - El volumen original
pg_data_prodsigue intacto con datos PG 16 - Redesplegar → DB arranca con datos originales
Post-migración
- Actualizar
compose.yml(dev) apostgres:18-alpiney recrear volumen local - Actualizar
CLAUDE.mdcon versión PostgreSQL 18 - Eliminar backup
/root/full_dump.dumptras 1 semana de estabilidad
Véase también
- [[decision—20260315—postgres-18-pgbouncer]] — Postgres 18 + pgbouncer
- [[crearack-tech—backend—database-architecture]] — arquitectura de base de datos
- [[crearack-tech—admin—cache-and-database]] — operativa de cache Valkey y DB Postgres
- [[crearack-tech—guides—database-admin-guide]] — guía de administración de DB
- [[incident—20260220—pgbouncer-dokploy-networking]] — incidente pgbouncer+Dokploy networking