Verificar um banco de dados com verify

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.

kent verify compara a estrutura de um banco com o esquema que esta compilação do Cordelia criaria e relata as diferenças.

É somente leitura e é o comando de diagnóstico: onde os outros recusam um banco que não conseguem ler, este o abre mesmo assim e diz por quê.

Sinopse

kent verify <dbfilename>

Um banco que corresponde

$ kent verify mydata.sqlite
Database:  mydata.sqlite

No differences: every table this database has matches the schema this build creates.
$ echo $?
0

Um banco que não corresponde

Cada diferença é uma linha, e a contagem se repete no fim para que um relatório longo continue legível. Este é um banco escrito no esquema 1, conferido por uma compilação que cria o esquema 2:

$ kent verify old.sqlite
Database:  old.sqlite

difference: user_version: this build writes 2, the database reports 1
difference: Monitoring.intensity: the database says INTEGER, this build says REAL
difference: Monitoring.ascent: the database says INTEGER, this build says REAL
difference: Monitoring.descent: the database says INTEGER, this build says REAL

4 differences from the schema this build creates.
$ echo $?
1

Uma coluna que o banco tem e que o Cordelia não cria é relatada do mesmo jeito, que é o que você vê se algo externo ao Cordelia escreveu no arquivo:

$ kent verify drifted.sqlite
Database:  drifted.sqlite

difference: Session.my_extra_column: the database has this column, this build does not create it

1 difference from the schema this build creates.
$ echo $?
1

Ele lê um banco que os outros recusam

info, details, files, activities e sports recusam um banco cuja user_version seja mais antiga do que esta compilação espera. O verify não, de propósito: uma versão errada é justamente o caso que ele existe para diagnosticar, então recusar abrir o arquivo o tornaria inútil exatamente quando é necessário.

O que ele não confere

Ele compara estrutura, não conteúdo: tabelas, colunas e seus tipos declarados, mais a versão do esquema. Não valida os dados nas linhas e não confere se o próprio formato de arquivo do SQLite está íntegro. Para isso, a ferramenta certa é o PRAGMA integrity_check do SQLite.

Ele também relata apenas diferenças em tabelas que o banco tem. Uma tabela que o Cordelia define e que este banco nunca criou não é um achado, porque um banco materializa só o que seus dados importados exigiram. Isso é normal, e os bancos esportivos publicados são todos assim: 14 tabelas das 128 que o esquema define.

Códigos de saída

0 quando nada difere, 1 quando algo difere. Isso o torna utilizável como teste em um script, que é a razão de ele imprimir uma contagem além das linhas.

Veja também