71 lines
2.3 KiB
Markdown
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`
|