Schema-Generierung
Überblick
Abschnitt betitelt „Überblick“Rebase verwendet eine Schema-as-Code-Pipeline, bei der Ihre TypeScript-Collection-Definitionen die einzige Quelle der Wahrheit sind. Die CLI transformiert sie durch eine deterministische Pipeline:
Collections (TypeScript) → Drizzle Schema → SQL Migrations → PostgreSQLDiese Seite behandelt jeden CLI-Befehl, der an dieser Pipeline beteiligt ist.
Die Pipeline
Abschnitt betitelt „Die Pipeline“1. Collections → Drizzle-Schema
Abschnitt betitelt „1. Collections → Drizzle-Schema“Ihre Collection-Definitionen in config/collections/ beschreiben Tabellen, Spalten, Typen, Relationen und Enums. Der Befehl schema generate liest diese und gibt eine Drizzle-ORM-Schemadatei aus.
2. Drizzle-Schema → Migrationen
Abschnitt betitelt „2. Drizzle-Schema → Migrationen“Aus dem generierten Drizzle-Schema vergleicht db generate mit dem aktuellen Datenbankzustand und erzeugt zeitgestempelte SQL-Migrationsdateien.
3. Migrationen → PostgreSQL
Abschnitt betitelt „3. Migrationen → PostgreSQL“Der Befehl db migrate wendet ausstehende Migrationen auf Ihre PostgreSQL-Datenbank an.
Befehle
Abschnitt betitelt „Befehle“rebase schema generate
Abschnitt betitelt „rebase schema generate“Generieren Sie eine Drizzle-ORM-Schemadatei aus Ihren Collection-Definitionen:
rebase schema generateWas er tut:
- Liest alle Collections aus
config/collections/ - Generiert
backend/src/schema.generated.tsmit Drizzle-Tabellendefinitionen, Enums und Relationen
Optionen:
| Flag | Beschreibung |
|---|---|
--collections, -c |
Pfad zum Collections-Verzeichnis (Standard: config/collections/) |
--output, -o |
Ausgabepfad für die generierte Schemadatei |
--watch, -w |
Auf Änderungen achten und automatisch neu generieren |
Der Watch-Modus ist während der Entwicklung nützlich — bearbeiten Sie eine Collection-Datei und das Schema wird sofort neu generiert:
rebase schema generate --watchrebase schema introspect
Abschnitt betitelt „rebase schema introspect“Rekonstruieren Sie Collection-Definitionen aus einer bestehenden PostgreSQL-Datenbank:
rebase schema introspectWas er tut:
- Verbindet sich mit Ihrer Datenbank (mit der Verbindungszeichenfolge aus Ihrer
.env) - Inspiziert alle Tabellen, Spalten, Typen und Fremdschlüssel
- Generiert Collection-Definitionsdateien
Optionen:
| Flag | Beschreibung |
|---|---|
--output, -o |
Ausgabeverzeichnis für die generierten Collection-Dateien |
Dies ist nützlich, wenn Sie Rebase auf einer bestehenden Datenbank einführen — zuerst introspizieren, dann die generierten Collections anpassen.
rebase db push
Abschnitt betitelt „rebase db push“Übertragen Sie Schemaänderungen direkt in die Datenbank ohne Migrationsdateien:
rebase db pushWas er tut:
- Liest das generierte Drizzle-Schema
- Wendet Änderungen direkt auf die Datenbank an (CREATE, ALTER, DROP)
- Erstellt keine Migrationsdateien
rebase db generate
Abschnitt betitelt „rebase db generate“Generieren Sie SQL-Migrationsdateien aus Schemaänderungen:
rebase db generateWas er tut:
- Vergleicht das Drizzle-Schema mit dem aktuellen Datenbankzustand
- Erzeugt zeitgestempelte SQL-Migrationsdateien im
drizzle/-Verzeichnis - Dateien können überprüft, bearbeitet und in die Versionskontrolle committet werden
Die generierten Migrationen sind einfache SQL-Dateien — Sie können sie vor dem Anwenden inspizieren und ändern.
rebase db migrate
Abschnitt betitelt „rebase db migrate“Führen Sie alle ausstehenden Migrationen aus:
rebase db migrateWas er tut:
- Liest das
drizzle/-Verzeichnis nach nicht angewendeten Migrationen - Wendet sie der Reihe nach auf die Datenbank an
- Verfolgt, welche Migrationen angewendet wurden
rebase db studio
Abschnitt betitelt „rebase db studio“Öffnen Sie Drizzle Studio, um Ihre Datenbank visuell zu durchsuchen und zu bearbeiten:
rebase db studiorebase db branch
Abschnitt betitelt „rebase db branch“Datenbank-Branching für parallele Entwicklung:
rebase db branch create feature_authrebase db branch listrebase db branch delete feature_authrebase doctor
Abschnitt betitelt „rebase doctor“Erkennen Sie Drei-Wege-Drift zwischen Ihren Collection-Definitionen, dem generierten Drizzle-Schema und der laufenden PostgreSQL-Datenbank:
rebase doctorWas er prüft:
- Collections ↔ Generiertes Schema — sind sie synchron?
- Generiertes Schema ↔ Datenbank — gibt es nicht angewendete Änderungen?
- Collections ↔ Datenbank — gibt es unerwarteten Drift?
Führen Sie doctor aus, wann immer sich etwas nicht synchron anfühlt. Es zeigt genau, wo die Diskrepanz liegt.
rebase generate-sdk
Abschnitt betitelt „rebase generate-sdk“Generieren Sie ein typisiertes Client-SDK aus Ihren Collection-Definitionen:
rebase generate-sdkWas er tut:
- Liest Collections aus
config/collections/(unterstütztindex.ts-Barrel-Exports oder einzelne Dateien) - Generiert TypeScript-Typen für alle Entitäten in
generated/sdk/ - Erzeugt eine
database.types.ts-Datei zur Verwendung mitcreateRebaseClient<Database>()
Optionen:
| Flag | Beschreibung |
|---|---|
-c, --collections-dir |
Pfad zum Collections-Verzeichnis (Standard: config/collections/) |
-o, --output |
Ausgabeverzeichnis für das SDK (Standard: generated/sdk/) |
--from <link|url> |
Liest das Schema von einem laufenden Projekt statt aus lokalem Quellcode. link verwendet das verknüpfte Projekt dieses Checkouts. |
--token |
Bearer-Token für den Contract-Endpunkt (Standard: $REBASE_SERVICE_KEY) |
Mit --from kann ein Repository ohne eigene Collections — ein separates Frontend, eine zweite Web-App, eine Mobile-App — einen typisierten Client für das Projekt generieren, mit dem es spricht. REBASE_SERVICE_KEY wird nur an das Projekt gesendet, mit dem dieses Checkout verknüpft ist; für jeden anderen Host ist --token explizit anzugeben.
Verwendung nach der Generierung:
import { createRebaseClient } from "@rebasepro/client";import { collectionsDictionary, type Database } from "./generated/sdk/database.types";
const client = createRebaseClient<Database>({ baseUrl: "http://localhost:3001", collections: collectionsDictionary,});
// Full type safety and autocompleteconst { data } = await client.data.products.find();Feldnamen in den generierten Typen sind unverändert die, die die API liefert — eine Spalte created_at ist row.created_at. Nur der Collection-Accessor wird in einen Property-Namen umgewandelt (my-notes → client.data.myNotes); genau diese Zuordnung stellt collectionsDictionary auf den Slug zurück.
Entwicklungs-Workflow
Abschnitt betitelt „Entwicklungs-Workflow“Der Workflow für schnelle Iteration in der Entwicklung:
# 1. Edit your collection in config/collections/# 2. Generate the Drizzle schemarebase schema generate
# 3. Push directly to dev databaserebase db pushProduktions-Workflow
Abschnitt betitelt „Produktions-Workflow“Der sichere, überprüfbare Workflow für die Produktion:
# 1. Edit your collection in config/collections/# 2. Generate the Drizzle schemarebase schema generate
# 3. Generate SQL migration filesrebase db generate
# 4. Review the generated SQL in drizzle/# 5. Commit the migration to version controlgit add drizzle/
# 6. Apply in productionrebase db migrateFehlerbehebung
Abschnitt betitelt „Fehlerbehebung“| Symptom | Lösung |
|---|---|
Could not detect an active database plugin |
Installieren Sie @rebasepro/server-postgres in backend/package.json |
| Schemadatei wird nicht aktualisiert | Prüfen Sie, ob der --collections-Pfad auf das richtige Verzeichnis zeigt |
| Migration zeigt unerwartete Änderungen | Führen Sie rebase doctor aus, um den Drift zu identifizieren |
db push schlägt in der Produktion fehl |
Verwenden Sie stattdessen db generate + db migrate |
Nächste Schritte
Abschnitt betitelt „Nächste Schritte“- Collections — Definieren Sie Ihr Datenmodell
- CLI-Referenz — Alle CLI-Befehle
- Client-SDK — Verwenden Sie das generierte SDK
