# Guía de Migración a PostgreSQL ## 🎯 Objetivo Migrar la aplicación de SQLite a PostgreSQL para mejor rendimiento y escalabilidad. ## 📋 Requisitos Previos ### 1. Instalar PostgreSQL en Windows #### Opción A: Instalador Oficial 1. Descarga PostgreSQL desde [https://www.postgresql.org/download/windows/](https://www.postgresql.org/download/windows/) 2. Ejecuta el instalador 3. Configura la contraseña del usuario `postgres` 4. Instala en el puerto por defecto (5432) #### Opción B: Usando Chocolatey ```bash choco install postgresql ``` ### 2. Crear la Base de Datos ```bash # Conectar a PostgreSQL psql -U postgres # Crear la base de datos CREATE DATABASE ani_assistant; # Verificar que se creó \l # Salir \q ``` ## 🔧 Configuración ### 1. Actualizar Variables de Entorno Edita tu archivo `.env`: ```env # Cambiar de SQLite a PostgreSQL DATABASE_URL="postgresql://postgres:tu-password@localhost:5432/ani_assistant" ``` ### 2. Verificar Configuración ```bash npm run check-env ``` ## 🚀 Proceso de Migración ### Paso 1: Generar Migraciones ```bash # Generar migración inicial npm run db:migrate ``` ### Paso 2: Aplicar Migraciones ```bash # Aplicar las migraciones a PostgreSQL npm run db:push ``` ### Paso 3: Configurar Usuarios ```bash # Crear usuarios de prueba npm run db:setup ``` ### Paso 4: Cargar Datos (Opcional) ```bash # Cargar datos de ejemplo npm run db:seed ``` ## 🔍 Verificación ### 1. Verificar Conexión ```bash npm run check-env ``` ### 2. Probar la Aplicación ```bash npm run dev ``` ### 3. Verificar en PostgreSQL ```bash psql -U postgres -d ani_assistant # Ver tablas \dt # Ver usuarios SELECT name, lastname, username, email, role FROM "User"; # Salir \q ``` ## 🆘 Solución de Problemas ### Error: "connection refused" - Verificar que PostgreSQL esté ejecutándose - Verificar el puerto (5432) - Verificar credenciales en DATABASE_URL ### Error: "database does not exist" ```bash # Crear la base de datos psql -U postgres CREATE DATABASE ani_assistant; \q ``` ### Error: "permission denied" - Verificar que el usuario tenga permisos - Verificar la contraseña en DATABASE_URL ### Error: "relation does not exist" ```bash # Regenerar el cliente de Prisma npm run db:generate # Aplicar migraciones npm run db:push ``` ## 📊 Diferencias con SQLite ### Ventajas de PostgreSQL - ✅ Mejor rendimiento con múltiples usuarios - ✅ Transacciones ACID completas - ✅ Mejor escalabilidad - ✅ Más tipos de datos - ✅ Mejor soporte para consultas complejas ### Consideraciones - ⚠️ Requiere instalación y configuración - ⚠️ Más recursos del sistema - ⚠️ Configuración de red para producción ## 🔄 Rollback (Si es necesario) Si necesitas volver a SQLite: 1. Cambiar DATABASE_URL en `.env`: ```env DATABASE_URL="file:./dev.db" ``` 2. Cambiar provider en `prisma/schema.prisma`: ```prisma datasource db { provider = "sqlite" url = env("DATABASE_URL") } ``` 3. Regenerar y aplicar: ```bash npm run db:generate npm run db:push npm run db:setup ``` ## 📝 Notas Importantes - **Backup**: Siempre haz backup de tus datos antes de migrar - **Testing**: Prueba en un entorno de desarrollo primero - **Performance**: PostgreSQL puede ser más lento en desarrollo local - **Storage**: Las imágenes se guardan en `/uploads/photos_profile/` ## 🎉 ¡Migración Completada! Una vez completada la migración, tu aplicación estará usando PostgreSQL con todas las nuevas características: - ✅ Usernames únicos generados automáticamente - ✅ Separación de nombre y apellido - ✅ Almacenamiento de imágenes en archivos - ✅ Mejor rendimiento y escalabilidad