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ção | Obrigatória | Descrição |
|---|---|---|
--in <archive> | Sim | O arquivo
.kent a ler. |
--out <dbfilename> | Sim | O 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.
| Recusa | Por quê |
|---|---|
| Não é um arquivo do formato | Não é um zip, ou não tem manifesto nem esquema dentro. |
Não traz mimetype, ou traz um que nomeia outro formato | Mesma
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 este | O 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 ausente | O 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 manifesto | Uma 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.