Files
got-gaming/scripts/README-MIGRATION.md

71 lines
2.3 KiB
Markdown

# 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`