Vérifier une base de données avec verify

Traduction automatique provisoire, non révisée. En cas de doute, consultez la version anglaise, qui fait référence.

kent verify compare la structure d’une base au schéma que cette version de Cordelia créerait, et signale les différences.

Il est en lecture seule et c’est la commande de diagnostic : là où les autres refusent une base qu’elles ne savent pas lire, celle-ci l’ouvre quand même et vous dit pourquoi.

Synopsis

kent verify <dbfilename>

Une base conforme

$ kent verify mydata.sqlite
Database:  mydata.sqlite

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

Une base non conforme

Chaque différence tient sur une ligne, et le total est répété à la fin pour qu’un long rapport reste lisible. Voici une base écrite sous le schéma 1, vérifiée par une version qui crée le schéma 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

Une colonne que la base possède et que Cordelia ne crée pas est signalée de la même façon : c’est ce que vous voyez si quelque chose d’extérieur à Cordelia a écrit dans le fichier :

$ 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

Il lit une base que les autres refusent

info, details, files, activities et sports refusent toutes une base dont la user_version est plus ancienne que ce que cette version attend. verify non, délibérément : une mauvaise version est précisément le cas qu’il sert à diagnostiquer, donc refuser d’ouvrir le fichier le rendrait inutile au moment où l’on en a besoin.

Ce qu’il ne vérifie pas

Il compare la structure, pas le contenu : tables, colonnes et types déclarés, plus la version du schéma. Il ne valide pas les données des lignes et ne vérifie pas que le format de fichier de SQLite est intact. Pour cela, PRAGMA integrity_check de SQLite est l’outil qu’il faut.

Il ne signale par ailleurs que les différences dans les tables que la base possède. Une table que Cordelia définit et que cette base n’a jamais créée n’est pas un constat, car une base ne matérialise que ce dont ses données importées avaient besoin. C’est normal, et les bases sportives publiées sont toutes ainsi : 14 tables sur les 128 que définit le schéma.

Codes de sortie

0 quand rien ne diffère, 1 dès que quelque chose diffère. Cela le rend utilisable comme test dans un script, et c’est pourquoi il imprime un total en plus des lignes.

Voir aussi