Skip to Content
Wagoo SaaS 1.0.25 is released 🎉
08 DevelopmentDatabaseGestion de la base de données

Gestion de la base de données

Guide pour gérer les migrations Prisma en développement.

Afficher le schéma Prisma

cat prisma/schema.prisma

Affiche le schéma complet avec tous les models et relations.

Créer une migration

Modifiction du schéma

Éditez prisma/schema.prisma :

model NewModel { id String @id @default(cuid()) name String createdAt DateTime @default(now()) }

Créer la migration

# Créer une migration pnpm prisma migrate dev --name add_new_model # Cela : # 1. Crée un fichier migration # 2. Applique la migration à la BD # 3. Génère le client Prisma

Migration avec réinitialisation

Si vous changez complètement le schéma :

# ⚠️ DANGER - EFFACE LA BASE! pnpm prisma migrate reset # Cela : # 1. Efface la BD # 2. Applique toutes les migrations # 3. Lance le seed.ts (si existe)

Ne l’utilisez que en développement!

Appliquer les migrations existantes

# Appliquer les migrations au schéma existant pnpm prisma migrate deploy # Ne crée pas de migration, applique juste

Voir l’état des migrations

# Voir l'état pnpm prisma migrate status # Affiche : # - Migrations appliquées # - Migrations en attente # - Dernière migration commune

Prisma Studio

Voir et modifier les données :

# Ouvrir Prisma Studio pnpm prisma studio # Ouvre http://localhost:5555

Vous pouvez :

  • Voir tous les enregistrements
  • CrĂ©er/modifier/supprimer
  • Filtrer et trier

Générer le client Prisma

# Générer après changements du schéma pnpm prisma generate # Fait automatiquement par `prisma migrate dev` # Mais utile après un pull Git

Seeding (Données initiales)

Créer le script de seed

prisma/seed.ts :

import { PrismaClient } from '@prisma/client' const prisma = new PrismaClient() async function main() { // Créer un utilisateur de test const user = await prisma.user.upsert({ where: { email: 'test@test.com' }, update: {}, create: { email: 'test@test.com', name: 'Test User', password: 'hashed-password', }, }) console.log('Créé :', user) } main() .catch((e) => { console.error(e) process.exit(1) }) .finally(async () => { await prisma.$disconnect() })

Ajouter le seed Ă  package.json

{ "prisma": { "seed": "tsx prisma/seed.ts" } }

Lancer le seed

pnpm prisma db seed # Exécute le script seed.ts

Vérifier les relations

Afficher les relations

pnpm prisma studio # Cliquez sur un modèle # Les relations apparaissent dans le panel droit

Intégrité référentielle

Vérifier les contraintes

model Post { id String @id @default(cuid()) title String author User @relation(fields: [authorId], references: [id]) authorId String @db.Text }
  • @relation : crĂ©e la relation
  • fields: [authorId] : champ de clĂ© Ă©trangère
  • references: [id] : champ rĂ©fĂ©rencĂ©

Migrations personnalisées

Si Prisma ne peut pas générer automatiquement :

# Créer une migration vide pnpm prisma migrate dev --name custom_migration # Éditez le fichier SQL généré # Ajoutez votre SQL personnalisé # Appliquez pnpm prisma migrate deploy

Fichier généré : prisma/migrations/20240101123456_custom_migration/migration.sql

-- Votre SQL personnalisé ALTER TABLE User ADD COLUMN customField VARCHAR(255);

Vérifier les performances

Voir les indexes

pnpm prisma db push --skip-generate # Affiche le schéma avec les indexes

Reset complet

Réinitialiser la BD

⚠️ Efface tout!

# Reset complet pnpm prisma migrate reset # Efface la BD # Applique toutes les migrations # Lance le seed.ts # Relancer le serveur après pnpm dev

Ne l’utilisez qu’en dev!

Gestion des migrations en équipe

Tirer du Git

# Quelqu'un a ajouté une migration git pull # Appliquer la migration pnpm prisma migrate deploy # Générer le client pnpm prisma generate # Relancer le serveur pnpm dev

Conflit de migration

Si 2 devs créent des migrations simultanément :

# Vous avez un conflit git status # Renommez votre migration mv prisma/migrations/20240101_your_migration \ prisma/migrations/20240101_timestamp_your_migration # Puis push git push

Inspection de la BD

Connecter directement Ă  PostgreSQL

# Se connecter à la BD psql postgresql://user:pass@localhost:5432/wagoo_dev # Voir les tables \dt # Voir le schéma d'une table \d users # Requête SQL SELECT * FROM users LIMIT 10; # Quitter \q

Backups en développement

Exporter la BD

# Créer un backup pg_dump postgresql://user:pass@localhost:5432/wagoo_dev > backup.sql # Restaurer un backup psql postgresql://user:pass@localhost:5432/wagoo_dev < backup.sql

Dépannage

”Prisma schema not found”

Error: Prisma schema not found at /path/to/prisma/schema.prisma

Solutions :

  • VĂ©rifiez que vous ĂŞtes Ă  la racine du projet
  • VĂ©rifiez que prisma/ existe

”Migration failed”

The migration failed on the database server with: Error: column "field" already exists

Solutions :

  1. Vérifiez que le schéma correspond à la BD
  2. Utilisez pnpm prisma db push --skip-generate pour synchroniser
  3. Ou pnpm prisma migrate reset (en dev seulement)

“Cannot generate Prisma Client”

pnpm prisma generate

Prochaines étapes

→ Tests → Code Standards

Last updated on