# Migration SQLite → PostgreSQL Script pour migrer les données de SQLite vers PostgreSQL. ## Prérequis 1. Le container `got-app` doit être démarré 2. Le container `got-postgres` doit être démarré et accessible 3. Le fichier SQLite doit être accessible dans le container (par défaut: `/app/data/dev.db`) ## Utilisation ### Dans le container Docker ```bash # IMPORTANT: Le script doit être exécuté depuis la racine du projet (/app) # Option 1: Exécuter directement depuis l'extérieur du container docker-compose exec got-app sh -c "cd /app && pnpm dlx tsx scripts/migrate-sqlite-to-postgres.ts" # Option 2: Se connecter au container puis exécuter docker-compose exec got-app sh # Dans le container: cd /app pnpm dlx tsx scripts/migrate-sqlite-to-postgres.ts ``` ### Variables d'environnement Le script utilise les variables d'environnement suivantes : - `SQLITE_DB_PATH` : Chemin vers le fichier SQLite (défaut: `/app/data/dev.db`) - `DATABASE_URL` : URL de connexion PostgreSQL (défaut: depuis les variables d'env du container) ### Exemple avec variables personnalisées ```bash docker-compose exec -e SQLITE_DB_PATH=/app/data/old.db got-app sh -c "cd /app && pnpm dlx tsx scripts/migrate-sqlite-to-postgres.ts" ``` ## Ce que fait le script 1. **Se connecte** à SQLite (lecture seule) et PostgreSQL 2. **Migre les données** dans l'ordre des dépendances : - Users - UserPreferences - Events - EventRegistrations - EventFeedbacks - SitePreferences - Challenges 3. **Utilise `upsert`** pour éviter les doublons (idempotent) 4. **Affiche la progression** en temps réel 5. **Affiche un résumé** à la fin avec les statistiques ## Notes importantes - Le script est **idempotent** : tu peux le relancer plusieurs fois sans problème - Les données existantes dans PostgreSQL seront **mises à jour** si elles existent déjà - Les **erreurs** sont affichées mais n'arrêtent pas la migration - Le script utilise `better-sqlite3` en **lecture seule** pour SQLite ## En cas d'erreur Si le script échoue : 1. Vérifie que les containers sont démarrés : `docker-compose ps` 2. Vérifie que le fichier SQLite existe : `docker-compose exec got-app ls -la /app/data/dev.db` 3. Vérifie les logs PostgreSQL : `docker-compose logs got-postgres` 4. Vérifie la connexion PostgreSQL : `docker-compose exec got-app pnpm prisma db pull`