Eine Datenbank mit restore wiederherstellen
Vorläufige, ungeprüfte automatische Übersetzung. Im Zweifelsfall konsultieren Sie die englische Version, die als Referenzversion gilt.
kent restore baut aus einem .kent-Archiv wieder eine Datenbank
auf. Es ist die Umkehrung von archive, und zusammen
ergeben die beiden einen Rundlauf: eine Datenbank, die Sie heute archivieren, ist eine
Datenbank, die Sie zurückbekommen können.
Übersicht
kent restore --in <archive> --out <dbfilename>
Argumente
| Option | Erforderlich | Beschreibung |
|---|---|---|
--in <archive> | Ja | Das zu lesende
.kent-Archiv. |
--out <dbfilename> | Ja | Die anzulegende Datenbank. Abgelehnt, wenn sie bereits existiert. |
Dieselben zwei Optionsnamen, die archive verwendet, mit vertauschten
Dateiarten: --in ist hier das Archiv, --out die Datenbank.
$ kent restore --in mydata.kent --out restored.sqlite
Restored restored.sqlite from mydata.kent
Tables: 11
Rows: 63686
Schema version: 2
Es überschreibt keine Datenbank
Ein vorhandenes --out wird abgelehnt, nie ersetzt, dieselbe Regel, der
createdb folgt. Dies sind die einzigen beiden
Kent-Befehle, die eine Datenbank schreiben, und das Ziel ist das eine, was Sie nicht
zurückbekommen, wenn es falsch ist.
$ kent restore --in mydata.kent --out existing.sqlite
kent restore: existing.sqlite already exists
Es gibt auch keine Möglichkeit, ein Archiv in eine Datenbank zu laden, die bereits Daten enthält. Das wäre ein Zusammenführen, ein eigener Befehl, den Kent nicht hat; siehe den Produkt-Fahrplan.
Was zurückkommt
Jeder Wert und seine SQLite-Speicherklasse. Eine als Dezimalzahl gespeicherte Zahl kommt als Dezimalzahl zurück und nicht als ganze Zahl, ein leeres Binärdatum kommt als leeres Binärdatum zurück und nicht als gar nichts, und Text behält, was er enthielt, Akzentzeichen, Symbole, sogar eingebettete Zeilenumbrüche.
Das ist ein stärkeres Versprechen als „dieselben Werte", und es wird auch so geprüft: der Rundlauf-Test vergleicht die Speicherklasse jeder Spalte jeder Zeile, nicht nur das, was die Werte ausgeben.
Das Einzige, was nicht zurückkommen kann
Keine-Zahl und Unendlich wurden als 0.0 ins Archiv geschrieben, weil JSON
keine Möglichkeit hat, sie auszudrücken. Eine Wiederherstellung kann sie nicht von einer
gemessenen Null unterscheiden und tut auch nicht so.
Ein altes Archiv wird zu einer alten Datenbank
Das Archiv hält die Schemaversion der Datenbank fest, aus der es stammt, und
restore setzt sie wieder ein. Das Archiv einer von einer älteren Cordelia
angelegten Datenbank wiederherzustellen gibt Ihnen also eine Datenbank, die jene ältere
Cordelia erkennen würde, und die die aktuelle Cordelia zu öffnen verweigern wird, genau wie
sie das Original verweigert hätte.
kent restore ist kein Migrationswerkzeug, und nichts sonst in Kent ist eines.
Eine alte Datenbank auf ein aktuelles Schema zu bringen heißt, die Daten dazwischen zu
verändern, wofür die Pipe-Form von kent sqldump da
ist.
Archive, die es ablehnt
Alles wird geprüft, bevor die Datenbank angelegt wird, sodass ein schlechtes Archiv Sie nichts kostet, keine halb geschriebene Datei, die Ihnen auffallen und die Sie löschen müssten.
| Ablehnung | Warum |
|---|---|
| Überhaupt kein Archiv | Es ist kein Zip, oder es enthält weder Manifest noch Schema. |
Trägt keinen mimetype oder einen, der ein anderes Format
nennt | Aus demselben Grund: der mimetype-Eintrag ist das, was ein
.kent zu sein erklärt. Siehe Archivieren dafür,
was er enthält. |
| Von einem neueren Kent geschrieben als diesem | Kent rät nicht an einem Format herum, das jünger ist als es selbst. Die Meldung nennt die gefundene und die verstandene Version. |
| Eine aufgeführte, aber fehlende Tabelle | Das Manifest des Archivs hatte sie versprochen. Eine Wiederherstellung, die stillschweigend einen Teil eines Archivs lädt und Erfolg meldet, wäre schlimmer als eine, die ablehnt. |
| Inhalt, der dem Manifest widerspricht | Eine Zeilenzahl oder Schemaversion, die nicht zu dem passt, was das Archiv über sich selbst sagt. Das Archiv ist beschädigt oder wurde falsch erstellt. |
$ kent restore --in future.kent --out out.sqlite
kent restore: this archive is format version 99, but this build of kent understands version 1 at most
$ echo $?
1
Ein Fehlschlag hinterlässt nichts, keine unvollständige Datenbank und kein temporäres Verzeichnis. Jede Tabelle wird innerhalb einer einzigen Transaktion geladen.