Zum Inhalt springen

Backups

Ein KI-Agent hat meine Supabase-Daten gelöscht. Was hole ich zurück?

Ein KI-Agent hat Daten aus deiner Datenbank gelöscht. Was du zurückholst, stand schon vorher fest, und die nächsten Minuten entscheiden über den Rest.

Vlad Tkachenko8 Min. Lesezeit

Kurz gesagt

  • Wenn ein KI-Agent Daten aus deiner Datenbank gelöscht hat, kannst du zurückholen, was in der letzten Kopie davor stand. Was danach entstand, wurde nirgends sonst aufgeschrieben.
  • Halte an, was neue Zeilen schreibt, bevor du irgendetwas anderes tust. Eine Wiederherstellung entfernt alles, was nach der Kopie dazukam, also ist eine Anmeldung von jetzt eine Zeile, die du selbst löschst.
  • Der Agent kann die Zeilen nicht zurücklegen. Er hatte sie nie, und ihn erneut gegen eine Live-Datenbank laufen zu lassen ist eine weitere Gelegenheit, mehr zu verlieren.

Du hast den Agenten gebeten, ein paar Testzeilen aufzuräumen, oder eine Migration zu reparieren, die nicht durchlief. Er hat das SQL selbst geschrieben, es gegen das Projekt laufen lassen, das deine Live-App benutzt, und gemeldet, dass es erledigt sei. Die App lädt weiterhin. Die Tabelle ist leer.

Wenn ein KI-Agent Daten aus deiner Datenbank gelöscht hat, stand schon vorher fest, was du zurückholen kannst. Die nächsten Minuten entscheiden, wie viel davon übrig bleibt.

Hier ist der Punkt, den die meisten Antworten darauf verfehlen. Sie sagen dir, du sollst den Code zurücksetzen oder den Agenten bitten, es rückgängig zu machen. Keines von beidem rührt deine Daten an, und während du es versuchst, wird das eine, was du noch in der Hand hast, still schlechter: was deine App gerade in die Datenbank schreibt.

Was kann ich zurückholen, nachdem eine KI meine Daten gelöscht hat?

Was in der letzten Kopie deiner Datenbank stand, die vor dem Löschen gezogen wurde, und nichts, was danach entstanden ist.

Das ist die ganze Antwort, und das meiste daran wurde vor Wochen entschieden. Es gibt hier keinen forensischen Schritt, nichts zu entlöschen, kein Protokoll, das in Supabase darauf wartet, abgespielt zu werden. Eine Zeile, die ein DELETE oder ein DROP TABLE entfernt hat, ist in dem Moment aus der Datenbank verschwunden, in dem die Anweisung bestätigt wird. Zurück kommt eine Kopie, und eine Kopie existiert entweder oder eben nicht.

Vor dir liegen also zwei Aufgaben. Herausfinden, welche Kopien es gibt. Und verhindern, dass die Lücke zwischen der neuesten und jetzt noch teurer wird, als sie ohnehin schon ist.

Halte zuerst an, was in die Datenbank schreibt

Bevor du nach einem Backup suchst, schalte alles ab, was neue Zeilen schreibt. Lesen ist in Ordnung.

Dafür gibt es zwei Gründe, und der zweite erwischt Leute.

Der erste: Eine Wiederherstellung ist keine Zusammenführung. Eine Kopie zurückzuspielen ersetzt die Tabellen darin durch das, was sie damals enthielten, und alles danach Geschriebene geht mit. Ein Kunde, der sich in der Stunde anmeldet, in der du das hier liest, ist eine Zeile, die du später selbst löschst, in einem Schritt, für den du dich bereits entschieden hast.

Der zweite: Manche Wege werden schlechter, während du wartest. Die Wiederherstellung auf einen Zeitpunkt bei Supabase dreht das ganze Projekt auf eine Minute deiner Wahl zurück, und je weiter sich die App vom Fehler entfernt, desto mehr echte Arbeit wirft dieses Zurückdrehen zusammen mit dem Schaden weg.

Eine Stunde hinter einem Wartungshinweis ist billig. Jemandem zu erklären, dass seine Bestellung angelegt und dann absichtlich entfernt wurde, ist es nicht.

Kann ich den Agenten bitten, es rückgängig zu machen?

Nein. Er hatte deine Zeilen nie.

Der Agent hat eine Anweisung geschrieben, und deine Datenbank hat sie ausgeführt. Was er jetzt hat, ist ein Protokoll dieses Gesprächs, und das ist etwas anderes als eine Kopie der Tabelle. Bitte ihn, das Löschen umzukehren, und du bekommst eine selbstsichere Antwort, plausibles SQL und keine Daten.

Über das Risiko lohnt es sich genau zu sprechen, weil die Bitte harmlos wirkt. Den Agenten erneut laufen zu lassen heißt: eine zweite unbeaufsichtigte Sitzung gegen eine Live-Datenbank, die bereits etwas verloren hat. Entscheidet er, die fehlende Tabelle repariere man am besten, indem man eine anlegt, steht jetzt eine neue leere Tabelle dort, wo die alte war, und du hast den Verlust schwerer beschreibbar gemacht für den, der dir als Nächstes hilft.

Nimm ihn vom Projekt, bis du weißt, wo du stehst. Dasselbe gilt für den Versionsverlauf deines Builders: Deinen Code auf heute Morgen zurückzusetzen stellt deine Seiten wieder her und lässt deine Daten genau dort, wo sie jetzt sind, aus Gründen, die man einmal verstanden haben sollte.

Wo du nachsiehst, in dieser Reihenfolge

Arbeite diese Liste ab und halte bei der ersten Stelle an, die es gibt. Sie ist danach sortiert, wie viel von deinen Daten zurückkommt, und nicht danach, wie einfach es ist.

Wo du nachsiehstWas zurückkommen kannWas vorher schon wahr sein musste
Supabase Wiederherstellung auf einen ZeitpunktDie Datenbank so, wie sie in einer Minute deiner Wahl war, auch der Minute vor dem LöschenEin bezahlter Tarif mit PITR-Option, vor heute hinzugebucht
Tägliches Supabase-BackupDie Datenbank so, wie sie bei der letzten automatischen Kopie warEin bezahlter Tarif
Ein verwalteter Backup-DienstDie Datenbank so, wie sie bei der letzten geprüften Kopie des Dienstes warDu hast einen vor heute angebunden
Ein pg_dump, das du selbst gezogen hastAlles in der Datei, und die ist so alt wie dein letztes Daran-DenkenDie Datei existiert und wurde fertig geschrieben
Eine Soft-Delete- oder Audit-Tabelle in deiner AppNur die Zeilen, über die deine App ohnehin Buch führteDu hast es absichtlich so gebaut
Der Versionsverlauf deines BuildersNichtsEr versioniert deinen Code, und deine Daten liegen in einem anderen Dienst.
Den Agenten noch einmal fragenNichtsEr hatte nie eine Kopie deiner Zeilen.

Jeder Weg, der überhaupt etwas zurückgibt, hat dieselbe Voraussetzung, und die entscheidet die Sache: Er musste vor dem Löschen schon da sein. Keiner lässt sich jetzt anschalten und rückwärts reichen. Welchen Supabase-Tarif du hast, entscheidet über die oberen zwei, und das Nachsehen dauert etwa zwei Minuten.

Was zurückkommt und was in die Lücke fällt

Die Kopie, so wie sie war, und nichts, was danach passiert ist.

Die Zeilen, die zwischen dieser Kopie und dem Löschen entstanden sind, sind nicht beschädigt und liegen nicht irgendwo unglücklich herum. Sie wurden nirgends aufgeschrieben außer in der Datenbank, aus der sie entfernt wurden. Das ist der Teil, den man vor einer leeren Tabelle schwer akzeptiert, weil etwas zu verlieren sonst heißt, dass es noch irgendwo ist.

Eine Wiederherstellung bringt dich zurück zur letzten Kopie. Die Zeilen im schattierten Band wurden nirgends sonst aufgeschrieben, also holt sie nichts zurück.

Wie breit dieses Band ist, hängt allein daran, was die Kopien gezogen hat. Ein nächtliches Backup kann einen ganzen Arbeitstag hineinlegen. Die Wiederherstellung auf einen Zeitpunkt verengt es auf eine Minute, und das ist der Grund, warum sie extra kostet. Ein Dump, den du gezogen hast, als es dir gerade einfiel, legt hinein, wie lange das her ist.

Es gibt eine Variante, in der die Lücke kaum zählt, bei einer App, deren Daten überwiegend deine eigenen Inhalte sind und sich langsam ändern. Und es gibt eine, in der sie sehr zählt: alles mit Bestellungen, Nachrichten oder Anmeldungen, wo ein Tag Zeilen ein Tag Menschen ist, denen es auffällt.

Der Agent hat einen Teil davon gelöscht, nicht alles

Dann hast du eine echte Wahl zu treffen, und keine der beiden Antworten ist sauber.

Eine Wiederherstellung legt nicht die fehlenden Zeilen zurück und lässt den Rest in Ruhe. Sie ersetzt die Tabellen der Kopie durch das, was diese Tabellen damals enthielten, komplett. Wiederherstellen holt zurück, was der Agent entfernt hat, und macht jede gute Zeile rückgängig, die seitdem geschrieben wurde. Nicht wiederherstellen behält die guten Zeilen und lässt das Loch.

Was richtig ist, hängt daran, wie viel echte Arbeit nach der Kopie liegt. Lautet die Antwort fast keine, stell wieder her und mach deinen Tag weiter. Lautet sie drei Tage Kundendaten, gewinnt meist der langsamere Weg: die überlebenden Zeilen zuerst exportieren, wiederherstellen, dann die exportierten Zeilen obendrauf zurücklegen. Das ist fummelig, und es ist der einzige Weg, der nichts verliert.

Es ist auch das Argument dafür, die Datenbank in ihrem jetzigen kaputten Zustand zu kopieren, bevor du überhaupt etwas anfasst. Wie du dich auch entscheidest, du willst zu dem Stand zurückkönnen, mit dem du angefangen hast.

Kopiere den kaputten Stand, bevor du ihn ersetzt. Das ist der Unterschied zwischen einer Entscheidung, die du revidieren kannst, und einer, die du nicht revidieren kannst.

So läuft dieselbe Stunde, wenn es schon eine Kopie gibt

Kürzer, und eher eine Entscheidung als eine Suche. Du wählst eine Kopie, du siehst nach, was sie enthielt, und du drückst den Knopf.

Genau das macht Reeve Care: geprüfte Kopien deiner Supabase-Datenbank nach Zeitplan, verschlüsselt und außerhalb deines Supabase-Kontos aufbewahrt, mit einer Wiederherstellung auf einen Klick dahinter. Bevor eine Wiederherstellung läuft, zieht sie eine frische Kopie des aktuellen Stands, damit auch sie sich rückgängig machen lässt.

Die Grenzen gehören in denselben Atemzug, denn nur wer sie kennt, kann entscheiden, ob es passt:

  • Es kopiert deine Datenbank, und die Dateien, die deine Nutzer hochgeladen haben, sobald du deine Storage-Buckets verbindest. Das ist optional und braucht einen zweiten Schlüssel.
  • Es arbeitet heute mit Supabase und mit sonst nichts.
  • Du stellst auf eine Kopie wieder her, die existiert, nicht auf eine beliebige Minute, die du nennst. Schlimmstenfalls verlierst du ein Intervall, also bis zu einer Nacht im Einstiegstarif und weniger in den beiden darüber.
  • Anmeldekonten werden nie angerührt. Niemand wird ausgeloggt, gelöscht oder zurückgeholt.
  • Der Datenbankschlüssel, den es aufbewahrt, kann nur lesen, und das war das Versprechen, als du ihn angebunden hast. Daten zurückzuschreiben braucht einen, der schreiben darf, also fragt eine Wiederherstellung jedes Mal nach deinem Datenbankpasswort und behält keines davon. Der optionale Schlüssel für deine Dateien kann schreiben, weil Supabase für Storage keinen Nur-Lese-Schlüssel ausgibt, und die Seite, auf der du ihn übergibst, sagt das vorher.

Was die einzelnen Tarife abdecken, steht auf der Startseite. Willst du dafür nichts zahlen, ist die schlichte Fassung desselben Schutzes ein pg_dump nach einem Zeitplan, den du wirklich einhältst, aufbewahrt an einem Ort, den der Verlust deines Supabase-Kontos nicht mitnimmt. Die drei Wege und was jedem davon entgeht geht das ohne Verkaufsrede durch.

Diese Stunde ist auf der Seite zu Supabase-Backups Kopie für Kopie dargestellt.

Was du jetzt sofort tun solltest

Was zu tun ist

  • Halte alles an, was in die Datenbank schreibt. Das ist der einzige Schritt hier, der teurer wird, je länger du ihn liegen lässt.
  • Stelle fest, welche Kopien es gibt, bevor du irgendetwas entscheidest: zuerst dein Supabase-Tarif, dann jeder Dump, den du selbst gezogen hast, dann die Frage, ob deine App über gelöschte Zeilen Buch führt.
  • Kopiere die Datenbank so, wie sie jetzt ist, kaputt und alles. Was du als Nächstes auch tust, du willst einen Weg hierher zurück.
  • Prüfe nach einer Wiederherstellung, ob die App noch schreiben kann. Eine Datenbank, die richtig liest und ein Insert verweigert, ist eine halbfertige Wiederherstellung, und nur ein Insert beweist es.
  • Wenn das Akute vorbei ist, richte die Kopie ein, die daraus ein Zehn-Minuten-Problem statt eines Vormittags gemacht hätte.

Bevor du diesen Tab schließt: Öffne dein Supabase-Projekt und finde heraus, ob überhaupt irgendetwas deine Datenbank kopiert, und schreib dir auf, wo diese Kopie liegt. Die 10-Minuten-Sicherheitscheckliste deckt das zusammen mit dem Übrigen ab, was bei einer frisch gestarteten App zu bestätigen ist.

FAQ

Ein KI-Agent hat Zeilen in meiner Supabase-Datenbank gelöscht. Bekomme ich sie zurück?

Nur aus einer Kopie, die vor dem Lauf entstanden ist. Finde also zuerst heraus, ob es eine gibt. Sieh nach, was dein Supabase-Tarif enthält, dann nach jedem Dump, den du selbst gezogen hast, dann danach, ob deine App zufällig über gelöschte Zeilen Buch führt. Gibt es nichts davon, sind die Zeilen weg, und keine Arbeit an der App ändert daran etwas. Kläre das, bevor du irgendetwas Neues in die Datenbank schreibst.

Kann ich den Agenten bitten, die Daten zurückzulegen?

Nein. Der Agent hatte deine Zeilen nie. Er hat eine Anweisung an deine Datenbank geschickt, und die Datenbank hat sie ausgeführt; was er jetzt hat, ist ein Protokoll des Gesprächs und keine Kopie der Tabelle. Ihn zu bitten, das Löschen umzukehren, bringt dir eine selbstsichere Antwort und keine Daten. Und es heißt eine zweite unbeaufsichtigte Sitzung gegen eine Datenbank, die bereits etwas verloren hat.

Ich bin auf dem kostenlosen Supabase-Tarif. Gibt es überhaupt etwas zurückzuholen?

Von Supabase nicht. Automatische Backups beginnen bei den bezahlten Tarifen, und die Wiederherstellung auf einen Zeitpunkt ist eine Zusatzoption darüber, also liegt bei einem kostenlosen Projekt nirgends eine Kopie von gestern. Bleiben ein Dump, den du selbst gezogen hast, oder eine Soft-Delete- oder Audit-Tabelle, die deine App ohnehin geschrieben hat. Prüfe beides, bevor du vom Schlimmsten ausgehst, und prüfe es, bevor du die App weiter benutzt.

Soll ich die App weiterlaufen lassen, während ich überlege?

Schalte ab, was schreibt. Lesen ist in Ordnung. Neue Zeilen sind gleich doppelt ein Problem: Eine Kopie zurückzuspielen entfernt alles, was danach dazukam, also sind Bestellungen von jetzt Daten, die du später selbst löschst, und ein Zurückdrehen auf einen Zeitpunkt hat umso mehr echte Arbeit wegzuwerfen, je länger du wartest. Ein Wartungshinweis für eine Stunde kostet weniger als der zweite Verlust.

Der Agent hat einige Zeilen gelöscht, aber nicht alle. Stelle ich trotzdem alles wieder her?

Das ist der unangenehme Fall, und eine saubere Antwort gibt es nicht. Eine Wiederherstellung ersetzt die Tabellen der Kopie komplett, holt also zurück, was du verloren hast, und macht zugleich jede gute Zeile rückgängig, die seitdem geschrieben wurde. Was richtig ist, hängt daran, wie viel echte Arbeit nach der Kopie liegt. Ist es viel, ist es langsamer und verliert nichts, die überlebenden Zeilen zuerst zu exportieren und sie nach der Wiederherstellung obendrauf zurückzulegen.

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.