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
| Option | Requise | Description |
|---|---|---|
--in <archive> | Oui | L'archive
.kent à lire. |
--out <dbfilename> | Oui | La 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.
| Refus | Pourquoi |
|---|---|
| Pas une archive du tout | Ce 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
format | Mê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-ci | Kent 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 absente | Le 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 manifeste | Un 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.