Reconstruir una base de datos con restore
Traducción automática provisional, sin revisar. En caso de duda, consulte la versión en inglés, que es la versión de referencia.
kent restore reconstruye una base de datos a partir de un archivo
.kent. Es el inverso de archive, y
juntos forman un viaje de ida y vuelta: una base de datos que archive hoy es una base de
datos que puede recuperar.
Sinopsis
kent restore --in <archive> --out <dbfilename>
Argumentos
| Opción | Obligatoria | Descripción |
|---|---|---|
--in <archive> | Sí | El archivo
.kent que leer. |
--out <dbfilename> | Sí | La base de datos que crear. Se rechaza si ya existe. |
Los mismos dos nombres de opción que usa archive, con los tipos de fichero
intercambiados: aquí --in es el archivo y --out la base de
datos.
$ kent restore --in mydata.kent --out restored.sqlite
Restored restored.sqlite from mydata.kent
Tables: 11
Rows: 63686
Schema version: 2
No sobrescribirá una base de datos
Un --out existente se rechaza, nunca se reemplaza: la misma regla que sigue
createdb. Estos son los dos únicos comandos de Kent
que escriben una base de datos, y el destino es lo único que no se puede recuperar si está
mal.
$ kent restore --in mydata.kent --out existing.sqlite
kent restore: existing.sqlite already exists
Tampoco hay forma de cargar un archivo dentro de una base de datos que ya contenga datos. Eso sería una fusión, que es un comando aparte que Kent no tiene; véase el Plan de producto.
Qué vuelve
Todos los valores y su clase de almacenamiento SQLite. Un número almacenado como decimal vuelve como decimal y no como entero, un dato binario vacío vuelve como dato binario vacío y no como nada en absoluto, y el texto conserva lo que contuviera: caracteres acentuados, símbolos, incluso saltos de línea incrustados.
Esa es una promesa más fuerte que «los mismos valores», y así se comprueba: la prueba de ida y vuelta compara la clase de almacenamiento de cada columna de cada fila, no solo cómo se imprimen los valores.
Lo único que no puede volver
No-es-un-número e infinito se escribieron en el archivo como 0.0, porque JSON
no tiene manera de expresarlos. Una restauración no puede distinguirlos de un cero medido y
no finge poder.
Un archivo antiguo se restaura a una base de datos antigua
El archivo registra la versión de esquema de la base de datos de la que salió, y
restore la restituye. Así que restaurar el archivo de una base de datos hecha
por una Cordelia más antigua le da una base de datos que esa Cordelia más antigua
reconocería, y que la Cordelia actual se negará a abrir, exactamente igual que habría
rechazado la original.
kent restore no es una herramienta de migración, y nada más en Kent lo es.
Llevar una base de datos antigua a un esquema actual significa cambiar los datos por el
camino, que es para lo que está la forma con tubería de
kent sqldump.
Archivos que rechaza
Todo se comprueba antes de crear la base de datos, así que un archivo defectuoso no le cuesta nada: no hay ningún fichero a medio escribir que advertir y borrar.
| Rechazo | Por qué |
|---|---|
| No es un archivo en absoluto | No es un zip, o no tiene dentro manifiesto ni esquema. |
No lleva mimetype, o lleva uno que nombra otro formato | Por
la misma razón: la entrada mimetype es lo que un .kent dice que
es. Véase Archivar para lo que contiene. |
| Escrito por un Kent más nuevo que este | Kent no adivinará un formato posterior a él. El mensaje nombra la versión que encontró y la que entiende. |
| Una tabla listada pero ausente | El propio manifiesto del archivo la prometía. Una restauración que cargara calladamente parte de un archivo e informara de éxito sería peor que una que se niegue. |
| Contenido que discrepa del manifiesto | Un recuento de filas o una versión de esquema que no coincide con lo que el archivo dice de sí mismo. El archivo está dañado o se construyó mal. |
$ 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 fallo no deja nada detrás: ni base de datos parcial, ni directorio temporal. Todas las tablas se cargan dentro de una sola transacción.