Reconstruire une base de données avec restore

Traduction automatique provisoire, non révisée. En cas de doute, consultez la version anglaise, qui fait foi.

kent restore reconstruit une base de données à partir d'une archive .kent. C'est l'inverse d'archive, et ensemble les deux font un aller-retour : une base que vous archivez aujourd'hui est une base que vous pouvez récupérer.

Synopsis

kent restore --in <archive> --out <dbfilename>

Arguments

OptionRequiseDescription
--in <archive>OuiL'archive .kent à lire.
--out <dbfilename>OuiLa base de données à créer. Refusée si elle existe déjà.

Les deux mêmes noms d'options qu'utilise archive, avec les types de fichiers intervertis : ici --in est l'archive, --out la base de données.

$ kent restore --in mydata.kent --out restored.sqlite
Restored restored.sqlite from mydata.kent
Tables:  11
Rows:    63686
Schema version: 2

Il n'écrasera pas une base de données

Un --out existant est refusé, jamais remplacé, la même règle que suit createdb. Ce sont les deux seules commandes de Kent qui écrivent une base de données, et la destination est la seule chose que vous ne pouvez pas récupérer si elle est erronée.

$ kent restore --in mydata.kent --out existing.sqlite
kent restore: existing.sqlite already exists

Il n'y a pas non plus moyen de charger une archive dans une base qui contient déjà des données. Ce serait une fusion, une commande distincte que Kent n'a pas. Voir le Plan de produit.

Ce qui revient

Chaque valeur, et sa classe de stockage SQLite. Un nombre stocké comme décimal revient décimal plutôt qu'entier, une donnée binaire vide revient comme donnée binaire vide plutôt que comme rien du tout, et le texte garde ce qu'il contenait, caractères accentués, symboles, jusqu'aux sauts de ligne incorporés.

C'est une promesse plus forte que « les mêmes valeurs », et elle est vérifiée comme telle : le test d'aller-retour compare la classe de stockage de chaque colonne de chaque ligne, pas seulement ce que les valeurs affichent.

La seule chose qui ne peut pas revenir

Pas-un-nombre et l'infini ont été écrits dans l'archive comme 0.0, parce que JSON n'a aucun moyen de les exprimer. Une restauration ne peut pas les distinguer d'un zéro mesuré et ne prétend pas le faire.

Une ancienne archive restaure une ancienne base

L'archive consigne la version de schéma de la base dont elle provient, et restore la remet en place. Restaurer l'archive d'une base créée par une Cordelia plus ancienne vous donne donc une base que cette Cordelia plus ancienne reconnaîtrait, et que la Cordelia actuelle refusera d'ouvrir, exactement comme elle aurait refusé l'originale.

kent restore n'est pas un outil de migration, et rien d'autre dans Kent ne l'est. Amener une ancienne base à un schéma actuel signifie modifier les données entre-temps, ce à quoi sert la forme en tube de kent sqldump.

Les archives qu'il refuse

Tout est vérifié avant que la base de données soit créée, si bien qu'une mauvaise archive ne vous coûte rien, pas de fichier à moitié écrit à repérer et supprimer.

RefusPourquoi
Pas une archive du toutCe n'est pas un zip, ou il n'y a ni manifeste ni schéma à l'intérieur.
Ne porte pas de mimetype, ou en porte un désignant un autre formatMême raison : l'entrée mimetype est ce qu'un .kent dit être. Voir Archiver pour ce qu'elle contient.
Écrite par un Kent plus récent que celui-ciKent ne devinera pas un format qui lui est postérieur. Le message nomme la version trouvée et la version comprise.
Une table listée mais absenteLe manifeste de l'archive la promettait. Une restauration qui chargerait silencieusement une partie d'une archive en annonçant un succès serait pire qu'un refus.
Un contenu en désaccord avec le manifesteUn nombre de lignes ou une version de schéma qui ne correspond pas à ce que l'archive dit d'elle-même. L'archive est endommagée ou a été mal construite.
$ 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

Un échec ne laisse rien derrière lui, pas de base partielle, pas de répertoire temporaire. Toutes les tables sont chargées dans une seule transaction.

Voir aussi