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ónObligatoriaDescripció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.

RechazoPor qué
No es un archivo en absolutoNo es un zip, o no tiene dentro manifiesto ni esquema.
No lleva mimetype, o lleva uno que nombra otro formatoPor 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 esteKent no adivinará un formato posterior a él. El mensaje nombra la versión que encontró y la que entiende.
Una tabla listada pero ausenteEl 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 manifiestoUn 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.

Véase también