Aller au contenu

Génération de schéma

Rebase utilise un pipeline schéma-en-tant-que-code où vos définitions de collections TypeScript sont l’unique source de vérité. La CLI les transforme via un pipeline déterministe :

Collections (TypeScript) → Drizzle Schema → SQL Migrations → PostgreSQL

Cette page couvre chaque commande CLI impliquée dans ce pipeline.

Vos définitions de collections dans config/collections/ décrivent les tables, colonnes, types, relations et enums. La commande schema generate les lit et produit un fichier de schéma Drizzle ORM.

À partir du schéma Drizzle généré, db generate compare avec l’état actuel de la base de données et produit des fichiers de migration SQL horodatés.

La commande db migrate applique les migrations en attente à votre base de données PostgreSQL.

Générez un fichier de schéma Drizzle ORM à partir de vos définitions de collections :

rebase schema generate

Ce qu’elle fait :

  • Lit toutes les collections depuis config/collections/
  • Génère backend/src/schema.generated.ts avec les définitions de tables Drizzle, les enums et les relations

Options :

Flag Description
--collections, -c Chemin vers le répertoire des collections (par défaut : config/collections/)
--output, -o Chemin de sortie pour le fichier de schéma généré
--watch, -w Surveiller les changements et régénérer automatiquement

Le mode watch est utile pendant le développement — modifiez un fichier de collection et le schéma est régénéré instantanément :

rebase schema generate --watch

Effectuez de l’ingénierie inverse sur les définitions de collections à partir d’une base de données PostgreSQL existante :

rebase schema introspect

Ce qu’elle fait :

  • Se connecte à votre base de données (en utilisant la chaîne de connexion de votre .env)
  • Inspecte toutes les tables, colonnes, types et clés étrangères
  • Génère des fichiers de définition de collections

Options :

Flag Description
--output, -o Répertoire de sortie pour les fichiers de collections générés

C’est utile lors de l’adoption de Rebase sur une base de données existante — introspectez d’abord, puis personnalisez les collections générées.

Poussez les changements de schéma directement vers la base de données sans fichiers de migration :

rebase db push

Ce qu’elle fait :

  • Lit le schéma Drizzle généré
  • Applique les changements directement à la base de données (CREATE, ALTER, DROP)
  • Ne crée pas de fichiers de migration

Générez des fichiers de migration SQL à partir des changements de schéma :

rebase db generate

Ce qu’elle fait :

  • Compare le schéma Drizzle avec l’état actuel de la base de données
  • Produit des fichiers de migration SQL horodatés dans le répertoire drizzle/
  • Les fichiers peuvent être examinés, modifiés et validés dans le contrôle de version

Les migrations générées sont de simples fichiers SQL — vous pouvez les inspecter et les modifier avant de les appliquer.

Exécutez toutes les migrations en attente :

rebase db migrate

Ce qu’elle fait :

  • Lit le répertoire drizzle/ pour les migrations non appliquées
  • Les applique dans l’ordre à la base de données
  • Suit quelles migrations ont été appliquées

Ouvrez Drizzle Studio pour parcourir et modifier votre base de données visuellement :

rebase db studio

Branchement de base de données pour le développement parallèle :

rebase db branch create feature_auth
rebase db branch list
rebase db branch delete feature_auth

Détectez la dérive à trois voies entre vos définitions de collections, le schéma Drizzle généré et la base de données PostgreSQL en direct :

rebase doctor

Ce qu’elle vérifie :

  • Collections ↔ Schéma généré — sont-ils synchronisés ?
  • Schéma généré ↔ Base de données — y a-t-il des changements non appliqués ?
  • Collections ↔ Base de données — y a-t-il une dérive inattendue ?

Exécutez doctor chaque fois que quelque chose semble désynchronisé. Il indique précisément où se situe l’incohérence.

Générez un SDK client typé à partir de vos définitions de collections :

rebase generate-sdk

Ce qu’elle fait :

  • Lit les collections depuis config/collections/ (prend en charge les exports de baril index.ts ou les fichiers individuels)
  • Génère des types TypeScript pour toutes les entités dans generated/sdk/
  • Produit un fichier database.types.ts à utiliser avec createRebaseClient<Database>()

Options :

Flag Description
--collections Chemin vers le répertoire des collections
--output Répertoire de sortie pour le SDK (par défaut : generated/sdk/)

Utilisation après la génération :

import { createRebaseClient } from "@rebasepro/client";
import type { Database } from "./generated/sdk/database.types";
const client = createRebaseClient<Database>({
baseUrl: "http://localhost:3001",
});
// Full type safety and autocomplete
const { data } = await client.data.products.find();

Le flux de travail d’itération rapide pour le développement :

# 1. Edit your collection in config/collections/
# 2. Generate the Drizzle schema
rebase schema generate
# 3. Push directly to dev database
rebase db push

Le flux de travail sûr et examinable pour la production :

# 1. Edit your collection in config/collections/
# 2. Generate the Drizzle schema
rebase schema generate
# 3. Generate SQL migration files
rebase db generate
# 4. Review the generated SQL in drizzle/
# 5. Commit the migration to version control
git add drizzle/
# 6. Apply in production
rebase db migrate
Symptôme Solution
Could not detect an active database plugin Installez @rebasepro/server-postgres dans backend/package.json
Le fichier de schéma ne se met pas à jour Vérifiez que le chemin --collections pointe vers le bon répertoire
La migration montre des changements inattendus Exécutez rebase doctor pour identifier la dérive
db push échoue en production Utilisez db generate + db migrate à la place