Reconstruir um banco de dados com restore

Tradução automática provisória, não revisada. Em caso de dúvida, consulte a versão em inglês, que é a versão de referência.

O kent restore reconstrói um banco de dados a partir de um arquivo .kent. É o inverso do archive, e juntos os dois fazem uma ida e volta: um banco de dados que você arquiva hoje é um banco de dados que pode ter de volta.

Sinopse

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

Argumentos

OpçãoObrigatóriaDescrição
--in <archive>SimO arquivo .kent a ler.
--out <dbfilename>SimO banco de dados a criar. Recusado se já existir.

Os mesmos dois nomes de opção que o archive usa, com os tipos de arquivo trocados: aqui --in é o arquivo e --out o banco de dados.

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

Ele não sobrescreverá um banco de dados

Um --out existente é recusado, nunca substituído, a mesma regra que o createdb segue. Estes são os dois únicos comandos do Kent que gravam um banco de dados, e o destino é a única coisa que você não consegue de volta se estiver errado.

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

Também não há como carregar um arquivo dentro de um banco de dados que já contém dados. Isso seria uma mesclagem, um comando à parte que o Kent não tem. Veja o Roteiro do produto.

O que volta

Todo valor, e sua classe de armazenamento do SQLite. Um número guardado como decimal volta decimal em vez de inteiro, um dado binário vazio volta como dado binário vazio em vez de nada, e o texto mantém o que continha, caracteres acentuados, símbolos, até quebras de linha embutidas.

Essa é uma promessa mais forte do que "os mesmos valores", e é verificada assim: o teste de ida e volta compara a classe de armazenamento de cada coluna de cada linha, não apenas o que os valores exibem.

A única coisa que não pode voltar

Não-um-número e infinito foram gravados no arquivo como 0.0, porque o JSON não tem como expressá-los. Uma restauração não consegue distingui-los de um zero medido e não finge conseguir.

Um arquivo antigo restaura para um banco de dados antigo

O arquivo registra a versão de esquema do banco de dados de que veio, e o restore a recoloca. Assim, restaurar o arquivo de um banco criado por um Cordelia mais antigo dá a você um banco que aquele Cordelia mais antigo reconheceria, e que o Cordelia atual recusará abrir, exatamente como teria recusado o original.

O kent restore não é uma ferramenta de migração, e nada mais no Kent é. Levar um banco antigo a um esquema atual significa alterar os dados no meio do caminho, que é para o que serve a forma encadeada do kent sqldump.

Arquivos que ele recusa

Tudo é verificado antes de o banco de dados ser criado, então um arquivo ruim não custa nada a você, nenhum ficheiro escrito pela metade para notar e apagar.

RecusaPor quê
Não é um arquivo do formatoNão é um zip, ou não tem manifesto nem esquema dentro.
Não traz mimetype, ou traz um que nomeia outro formatoMesma razão: a entrada mimetype é o que um .kent diz ser. Veja Arquivar para o que ela contém.
Gravado por um Kent mais novo do que esteO Kent não vai adivinhar um formato posterior a ele. A mensagem nomeia a versão que encontrou e a versão que entende.
Uma tabela listada mas ausenteO próprio manifesto do arquivo a prometeu. Uma restauração que carregasse silenciosamente parte de um arquivo e relatasse sucesso seria pior do que uma que recusa.
Conteúdo em desacordo com o manifestoUma contagem de linhas ou versão de esquema que não bate com o que o arquivo diz de si mesmo. O arquivo está danificado ou foi construído incorretamente.
$ 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

Uma falha não deixa nada para trás, nenhum banco de dados parcial e nenhum diretório temporário. Todas as tabelas são carregadas dentro de uma única transação.

Veja também