Mensagens de erro e códigos de saída

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.

As mensagens de falha do Kent são um conjunto curto e fixo. Cada uma nomeia o comando que a produziu, então uma mensagem diz a você tanto o que deu errado quanto onde. Esta página lista todas elas.

O Kent imprime em inglês, então as mensagens abaixo aparecem exatamente como surgem no seu terminal; o que está traduzido é a explicação de cada uma.

Códigos de saída

Não há um código separado por tipo de falha. Em um script, teste o código de saída para decidir se o comando funcionou, e leia a mensagem para descobrir por que não funcionou:

if ! kent info mydata.sqlite; then
    echo "could not report on the database" >&2
fi

Erros de linha de comando

Estes vêm da análise da linha de comando, antes de qualquer banco de dados ser aberto. Cada um é seguido da listagem de uso completa, o mesmo texto que o kent help imprime.

$ kent
missing command
usage: kent help
usage: kent createdb <dbfilename>
...
$ kent merge mydata.sqlite
unknown command: merge
usage: kent help
usage: kent createdb <dbfilename>
...
$ kent info
wrong number of arguments
usage: kent info <dbfilename>

kent sqldump e kent archive são as exceções: recebem opções em vez de um banco de dados posicional, então um banco omitido é relatado como opção ausente.

$ kent sqldump
missing required flag: --in
usage: kent sqldump --in <dbfilename> [--out <outfile>] [--schema-only]
$ kent archive --in mydata.sqlite
missing required flag: --out
usage: kent archive --in <dbfilename> --out <archive>

O archive e o restore exigem os dois o --out, onde o sqldump o trata como opcional. Um zip não pode ser gravado na saída padrão e um banco de dados não pode ser construído nela, então nenhum dos dois tem um padrão ao qual recorrer.

Erros de arquivo e de banco de dados

Cada mensagem começa com kent e o nome do comando.

MensagemO que significa
kent createdb: NAME already existsO arquivo de destino já está lá. O createdb nunca sobrescreve; remova o arquivo você mesmo se pretendia substituí-lo.
kent info: NAME does not existO caminho não está lá. O Kent deliberadamente não o cria. A mesma mensagem aparece para details.
kent info: failed to open database: …O arquivo existe, mas não pôde ser aberto como banco de dados Cordelia, comumente porque não é um, ou porque seu esquema é mais antigo do que esta compilação aceita.
kent info: failed to read schema versionO banco de dados abriu, mas sua versão de esquema não pôde ser lida.
kent info: failed to list tablesO banco de dados abriu, mas sua lista de tabelas não pôde ser lida.
kent info: failed to count rows in NAMEA contagem de linhas de uma tabela específica não pôde ser lida. A tabela nomeada é a que falhou.
kent createdb: failed to create databaseO arquivo não pôde ser criado, na maioria das vezes um diretório ausente ou um problema de permissões no caminho de destino.
kent createdb: failed to create tablesO arquivo foi criado, mas o esquema não pôde ser gravado nele.
kent sqldump: NAME does not existO caminho dado a --in não está lá. Como nos outros comandos, o Kent não o cria.
kent sqldump: refusing to write the export over its own source: NAME--in e --out nomeiam o mesmo arquivo. Recusado antes de qualquer leitura, em vez de truncar o banco de dados que você pediu para exportar.
kent files: NAME does not existO caminho não está lá, e o Kent não o cria. Veja files.
kent archive: NAME does not existO caminho dado a --in não está lá. Como em todo outro comando, o Kent não o cria.
kent archive: cannot create the archive NAMEO destino dado a --out não pôde ser aberto para gravação, na maioria das vezes um diretório ausente ou um problema de permissões.
kent archive: cannot write NAMEUm arquivo não pôde ser gravado no diretório de preparação ao lado do destino. Comumente um disco cheio: um pacote precisa de espaço para si e para seu conteúdo em preparação ao mesmo tempo. Veja archive.
kent archive: cannot add NAME to the archiveUm arquivo em preparação não pôde ser acrescentado ao zip.
kent archive: finalising the archive failedO zip não pôde ser fechado e concluído. O pacote parcial é removido em vez de deixado para trás.
kent restore: NAME already existsO banco de dados que --out nomeia já está lá. O restore nunca sobrescreve um, a mesma regra que o createdb segue.
kent restore: NAME is not readable as a kent archive: …O arquivo não é um zip, ou não pôde ser aberto. O motivo subjacente vem depois dos dois-pontos.
kent restore: NAME is not a kent archive: it has no …É um zip, mas falta o manifesto ou o esquema que todo pacote carrega.
kent restore: this archive is format version N, but this build of kent understands version M at mostO pacote foi gravado por um Kent mais novo. O Kent recusa em vez de adivinhar um formato posterior a ele.
kent restore: the archive's manifest lists table "NAME" but the archive has no …O pacote está incompleto. Recusado em vez de restaurado em parte.
kent restore: the archive's manifest claims N rows in "NAME" but it holds MO pacote discorda de si mesmo, então está danificado ou foi construído incorretamente.
kent restore: the archive is inconsistent: its schema.sql stamps schema version N but its manifest says MO mesmo, para a versão de esquema.

Onde uma mensagem termina em dois-pontos, o erro subjacente do banco de dados vem em seguida na mesma linha. Esse detalhe final vem da camada de banco de dados do Cordelia, então a mesma redação aparece no Cordelia. Veja as mensagens de erro do Cordelia.

O banco de dados anterior a esta compilação

Este merece destaque porque a redação pode soar como corrupção quando não é:

$ kent info old.sqlite
kent info: failed to open database: This database uses an older schema and cannot be opened; version 2 is required. Create a new database and import your .FIT files again.
$ echo $?
1

O arquivo está intacto. Ele simplesmente foi gravado por um Cordelia mais antigo do que esta compilação do Kent entende, e é recusado na abertura em vez de lido com um esquema que não corresponde a ele.

kent sqldump e kent archive são os dois comandos que não o recusam. Ler um banco de dados antigo é exatamente o que se faz antes de migrá-lo, então os dois o leem assim mesmo. O sqldump avisa na saída de erro; isso é um aviso, não um erro, e o código de saída é 0:

$ kent sqldump --in old.sqlite --out old.sql
kent sqldump: note: this database reports schema version 0, but this build of cordelia expects 2. Exporting it anyway.
$ echo $?
0

O archive não imprime tal observação. Ele registra a versão de esquema que encontrou no próprio manifest.json do pacote, de modo que a informação viaja com o pacote em vez de passar rolando por um terminal.

O Kent não tem nenhum comando que migre um banco antigo no lugar. Lê-lo é a entrada de uma migração, não uma migração em si. Veja Exportar um banco de dados com sqldump e Arquivar um banco de dados com archive.

Erros internos não tratados

Se algo escapar ao tratamento normal de erros do Kent, é relatado na saída de erro em vez da saída padrão, e o código de saída continua sendo 1:

$ kent info /some/unreadable/path.sqlite
kent: filesystem error: ...
kent: unhandled exception of unknown type

Qualquer um dos dois vale um relato. Veja Relatórios de erros e solicitações de recursos, e inclua o comando exato que você executou.

Veja também