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

OptionErforderlichBeschreibung
--in <archive>JaDas zu lesende .kent-Archiv.
--out <dbfilename>JaDie 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.

AblehnungWarum
Überhaupt kein ArchivEs ist kein Zip, oder es enthält weder Manifest noch Schema.
Trägt keinen mimetype oder einen, der ein anderes Format nenntAus 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 diesemKent 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 TabelleDas 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 widersprichtEine 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.

Siehe auch