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

2.3 KiB

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

# 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

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