Zum Inhalt springen

Backups

Supabase Branching ist kein Backup. Es geht nur vorwärts.

Warum Supabase Branching kein Backup ist: Ein Branch startet ohne deine Daten, und ein Merge bringt nur das Schema. Wofür es gut ist und was stattdessen hilft.

Vlad Tkachenko7 Min. Lesezeit
Eine Datenlinie läuft weiter, während eine zweite Linie abzweigt und daneben eine leere Datenbank mitführt.

Kurz gesagt

  • Supabase Branching ist kein Backup. Ein Branch ist eine zweite Datenbank zum Testen von Änderungen, und er startet ohne deine Produktionsdaten.
  • Ein Merge spielt deine Schema-Änderungen in die Produktion. Er trägt nie Zeilen mit, und es gibt keinen Vorgang, der einen älteren Stand deiner Daten zurücklegt.
  • Auch ein Branch, in den du deine Daten klonst, liegt im selben Konto, und ein Preview-Branch wird gelöscht, sobald sein Pull Request schließt.

Du hast Supabase Branching angeschaltet, weil es nach der sorgfältigen Art zu arbeiten aussah. Neben deinem Projekt steht jetzt ein Preview-Branch, Änderungen werden dort ausprobiert, bevor sie jemand sieht, und das Ganze fühlt sich deutlich sicherer an als noch letzten Monat.

Es ist auch sicherer. Es ist nur kein Backup, und der Unterschied zeigt sich an genau einem Tag.

Hier ist der Punkt, den die Branching-Anleitungen überspringen: Ein Branch ist eine zweite Datenbank neben deiner ersten, keine frühere Fassung davon. Branching ist der Ort, an den du gehst, bevor du etwas änderst. Ein Backup ist der Ort, an den du gehst, wenn schon etwas schiefging. Branching anzuschalten legt nirgendwo eine Kopie deiner Daten ab.

Ist Supabase Branching ein Backup?

Nein. Ein Branch startet als leere Datenbank im Gewand deines Schemas, und nichts am Branching legt einen älteren Stand deiner Daten zurück.

Supabases eigene Dokumentation ist da deutlich: „Neue Branches starten ohne jegliche Daten aus deinem Hauptprojekt. Das soll deine sensiblen Produktionsdaten besser schützen." Ein Branch wird aus deinen Migrationen gebaut, und eine Migration beschreibt die Form einer Datenbank. Die Tabellen, die Spalten, die Policies. Nie die Zeilen.

Der Branch neben deinem Projekt ist also nicht die Kopie von Dienstag. Er ist eine neue Datenbank, die deine Nutzer nie gesehen hat.

Ein Supabase-BranchEin Backup
Hält deine Zeilen von früherNur wenn du sie hineingeklont hastJa, das ist die ganze Aufgabe
Kann die Produktion zurückversetzenNieJa
Liegt außerhalb deines Supabase-KontosNein, es ist ein weiteres Projekt darinKommt darauf an, welchen der drei Wege du gingst
Ist nächsten Monat noch daNur wenn du ihn persistent gemacht hastSo lange, wie du es aufbewahrst
Wofür es da istEine Änderung testen, bevor sie jemanden erreichtZurück zu dem Moment, bevor etwas jemanden erreichte

Wenn du nie festgestellt hast, was deine Datenbank eigentlich kopiert, ist genau das die Aufgabe, zu der dieser Artikel dich schicken will, und dein Tarif klärt das meiste davon in zwei Minuten.

Was ein Branch tatsächlich ist

Ein ganzes zweites Supabase-Projekt, mit allem Eigenen.

„Jeder Branch ist eine eigene Umgebung mit eigener Supabase-Instanz und eigenen API-Zugangsdaten", schreibt die Dokumentation. Eigener Connection String, eigene Keys, eigenes Storage, eigene Login-Konten, eigene Zeilen. Nichts darin ist mit dem Projekt verdrahtet, auf dem deine Nutzer sitzen, und genau das macht es sicher, darin etwas kaputtzumachen.

Diese Abschottung ist die ganze Funktion, und sie ist auch der Grund, warum er nicht nebenbei ein Backup sein kann. Die Kopie deiner Daten, auf die du gehofft hast, wurde nie gezogen, und der Ort, an dem du sie suchen würdest, ist seit dem Tag seiner Entstehung leer.

Was ein Merge tut, und was er nicht tut

Er trägt deine Schema-Änderungen in die Produktion. Er trägt nie Zeilen, in keine Richtung, zu keinem Zeitpunkt.

Beim Mergen spielt Supabase die Migrationen deines Branches gegen deine Produktionsdatenbank und liefert deine Edge-Function-Änderungen aus. Das ist die ganze Fracht. Eine neue Tabelle, eine neue Spalte, eine umgeschriebene Policy: Die reisen mit. Die Zeilen, die du beim Testen angelegt hast, bleiben im Branch, und die Zeilen in der Produktion bleiben genau so, wie sie waren, einschließlich derer, die du ersetzen wolltest.

Ein Merge liefert die Form deiner Datenbank und den Code drumherum aus. Die Zeilen sind das eine, wofür er nie gebaut war.

Leute erwarten eine Fassung davon, die es nicht gibt: einen Merge, der in die Produktion greift und die Dinge zurücklegt. Was Branching stattdessen hat, ist ein Deployment, nach vorne gespielt, auf das, was zu dem Zeitpunkt gerade in der Produktion steht.

Aber ich habe meine Produktionsdaten in den Branch geklont

Dann hast du eine Kopie deiner Zeilen, und drei Dinge an dieser Kopie entscheiden, was sie an dem Tag wert ist, an dem du sie brauchst.

Das geht, und es ist nichts Exotisches. Die Supabase-CLI beschreibt den Schalter als „ob Produktionsdaten in die Branch-Datenbank geklont werden sollen", und die Management-API nimmt dieselbe Option beim Anlegen eines Branches. Hast du sie benutzt, hält dein Branch tatsächlich deine Daten.

  • Sie wurde einmal gezogen. Der Klon passiert beim Anlegen des Branches, und danach füllt ihn nichts nach. Jede Bestellung, jede Anmeldung und jeder Kommentar seitdem liegt in der Produktion und sonst nirgends, und das ist der ganze Unterschied zwischen einer Kopie und einem Zeitplan.
  • Sie liegt im selben Konto. Ein Branch ist ein weiteres Projekt unter derselben Organisation, auf derselben Karte, hinter demselben Login. Jeder Weg, dein Supabase-Konto zu verlieren, nimmt den Branch mit, und das ist ein anderes Unglück als das Kaputtmachen der eigenen Daten.
  • Niemand hat sie zurückgelesen. Ein Klon, der halb durchlief, sieht von außen genauso aus wie einer, der fertig wurde, bis zu dem Moment, in dem du ihn öffnest.

Der Branch ist der Teil, der verschwinden soll

Ein Preview-Branch wird gelöscht, sobald sein Pull Request gemergt oder geschlossen wird. Das ist das dokumentierte Verhalten der Funktion.

Supabase nennt Preview-Branches „kurzlebig und am besten geeignet für gezieltes Testen" und sagt, sie „werden automatisch gelöscht, wenn ein PR gemergt oder geschlossen wird". Die andere Sorte, persistente Branches, sind „langlebig und empfohlen für Umgebungen wie Staging, QA oder Entwicklung", und die überstehen das Schließen des Pull Requests.

Ein Backup steht hinter dir auf der Zeitleiste, an einem Moment, den du benennen kannst. Ein Branch läuft neben dir, und hinter ihm ist nichts, wonach du greifen könntest.

In der Standardeinstellung ist der Branch mit deiner einzigen geklonten Kopie also genau das, was dein Arbeitsablauf an dem Tag wegwirft, an dem die Arbeit fertig ist. Ihn zu behalten heißt, ihn persistent zu machen, und ein persistenter Branch ist ein zweites laufendes Supabase-Projekt. Supabase führt Branching auf den bezahlten Tarifen und rechnet es pro Branch und Stunde ab, nachzulesen auf ihrer Preisseite.

Wofür Branching wirklich gut ist

Für eine ganze Menge, und dieser Artikel wäre unehrlich, wenn er das nicht sagte.

Ein Branch ist der billigste Ort, um herauszufinden, dass eine Migration eine Spalte entfernt, bevor sie die Spalte entfernt, in der deine Kunden sitzen. Du kannst eine Policy-Änderung an einer Datenbank proben, die genau wie deine geformt ist, mit eigenen Keys, sodass ein Fehler niemanden erreicht. Er gibt einer KI einen Ort, an dem sie falsch liegen darf und der nicht deine Live-App ist. Ein Backup kann nichts davon.

Die Lücke liegt darin, welche Art Unglück er abdeckt. Branching schützt die Änderungen, die durch einen Pull Request laufen. Das meiste, was Leuten tatsächlich ihre Daten kostet, kommt dort nie vorbei: ein Löschen im Supabase-Tabelleneditor, das mehr Zeilen traf als gemeint, ein Seed-Skript, das auf das Live-Projekt zeigte, eine Migration, die eine KI schrieb und du um ein Uhr nachts abgenickt hast, ein Aufräumen von scheinbaren Testdaten. Nichts davon läuft auf dem Weg in die Produktion durch einen Branch, und das ist derselbe Grund, aus dem ein Rücksprung im Code keine gelöschte Tabelle mitbringt.

Diese zweite Art Unglück ist das, was ein Backup beantwortet. Es steht hinter dir in der Zeit und hält den Stand deiner Datenbank zu einem Moment, den du benennen kannst, damit ein Fehler außerhalb deines Arbeitsablaufs noch irgendwohin zurückkann.

Genau das ist auch Reeve Care: geplante Kopien deiner Supabase-Datenbank, außerhalb deines Supabase-Kontos aufbewahrt, zurückgelesen und geprüft, bevor eine davon als gemacht zählt. Verbinde deine Storage-Buckets, und die von deinen Nutzern hochgeladenen Dateien fahren mit, sodass eine Wiederherstellung die Zeilen zurücklegt und die Bilder, auf die sie zeigen.

Lass Branching so oder so an. Nichts oben ist ein Argument, es abzuschalten.

Was du diese Woche tun solltest

Was zu tun ist

  • Finde heraus, was deine Datenbank nach Zeitplan kopiert, getrennt von allem, was sie branched. Dauert das länger als eine Minute, lautet die Antwort: nichts.
  • Wenn du einen geklonten Branch als Sicherheitsnetz behandelt hast, notiere das Datum seiner Entstehung und das Datum, an dem sein Pull Request schließt. Das sind die beiden Enden dessen, was er abdeckt.
  • Schalte das Backup an, das dein Supabase-Tarif enthält. Es ist das Billigste auf dieser Liste und deckt das gewöhnliche Unglück ab, nämlich dass du deine eigenen Daten kaputtgemacht hast.
  • Halte eine Kopie außerhalb deines Supabase-Kontos, denn ein Branch und ein Plattform-Backup liegen beide hinter demselben Login wie das, was sie schützen.
  • Spiel eine Kopie in ein Wegwerf-Projekt zurück, damit das erste Lesen dieser Datei nicht der Tag ist, an dem du sie brauchst.

Bevor du diesen Tab schließt: Öffne dein Supabase-Projekt und sieh nach, ob irgendetwas nach Zeitplan eine Kopie zieht. Diese eine Antwort ist die ganze Arbeit von heute, und Branching ändert daran nichts. Die 10-Minuten-Sicherheitscheckliste deckt sie zusammen mit dem Übrigen ab, was bei einer frisch gestarteten App zu bestätigen ist, und was eine Kopie enthält und was der Knopf tatsächlich tut, steht auf der Seite zu Supabase-Backups.

FAQ

Ist Supabase Branching ein Backup?

Nein. Ein Branch ist eine eigene Supabase-Datenbank, gebaut aus deinen Migrationen, und Supabase dokumentiert, dass neue Branches ohne die Daten aus deinem Hauptprojekt starten. Branching gibt dir einen Ort, um eine Änderung zu testen, bevor sie die Produktion erreicht. Ein Backup gibt dir eine Kopie deiner Daten von einem Zeitpunkt, den du benennen kannst, damit du dorthin zurück kannst. Das sind zwei verschiedene Aufgaben, und das Erste anzuschalten tut nichts für das Zweite.

Sind meine Produktionsdaten in einem Supabase-Preview-Branch?

Standardmäßig nicht. Supabase sagt, dass neue Branches mit keinerlei Daten aus deinem Hauptprojekt starten, und nennt als Grund den Schutz deiner Produktionsdaten. Du kannst dich beim Anlegen des Branches für einen Klon entscheiden, und die CLI beschreibt diesen Schalter als das Klonen von Produktionsdaten in die Branch-Datenbank. Hast du das nicht verlangt, hat dein Branch deine Tabellen und keine deiner Zeilen.

Kann ich meine Produktionsdatenbank aus einem Branch wiederherstellen?

Im Branching gibt es kein Wiederherstellen. Ein Merge spielt die Migrationen des Branches gegen deine Produktionsdatenbank und liefert deine Edge-Function-Änderungen aus; nichts auf diesem Weg bewegt Zeilen, und nichts daran dreht etwas zurück. Hast du Produktionsdaten in einen Branch geklont, könntest du diese Datenbank herausziehen und selbst zurückspielen, aber dann schützt dich der Dump und nicht der Branch.

Was passiert mit meinem Branch, wenn ich den Pull Request merge?

Ein Preview-Branch wird gelöscht. Supabase beschreibt Preview-Branches als kurzlebig und sagt, sie werden automatisch gelöscht, sobald ein Pull Request gemergt oder geschlossen wird. Persistente Branches sind die andere Sorte, gedacht für Staging oder QA, und die verschwinden beim Schließen des Pull Requests nicht. Hält also ein Branch die einzige Kopie von etwas, das dir wichtig ist, wirft die Standardeinstellung sie an dem Tag weg, an dem die Arbeit fertig ist.

Kostet Branching extra?

Ja. Supabase führt Branching auf den bezahlten Tarifen und rechnet es pro Branch und Stunde zusätzlich zu deinem Abo ab. Lies den aktuellen Satz auf ihrer Preisseite statt hier, denn er gehört ihnen. Praktisch heißt das: Ein persistenter Branch, der läuft, ist ein zweites Supabase-Projekt, das du jede Stunde seines Bestehens bezahlst.

Geschrieben von

Vlad Tkachenko

Gründer, Reeve

Ich schaue mir den ganzen Tag Apps an, die mit Lovable, Bolt, v0, Cursor und Replit gebaut wurden, und die kurze Liste von Fehlern, die darin immer wieder auftauchen.

Mehr über den Autor

Weiterlesen

Unsicher, wie es um deine eigene App steht?

Starte einen kostenlosen Scan und erhalte in rund 20 Sekunden eine verständliche Note von A bis F. Ohne Konto, ohne Karte.

App kostenlos scannen

Automatisierte externe Prüfung, kein vollständiges Audit. Das Fehlen von Funden ist keine Garantie für Sicherheit.