Eine Datenbank mit verify prüfen

Vorläufige, ungeprüfte automatische Übersetzung. Im Zweifelsfall konsultieren Sie die englische Version, die als Referenzversion gilt.

kent verify vergleicht die Struktur einer Datenbank mit dem Schema, das dieser Cordelia-Build anlegen würde, und meldet die Unterschiede.

Er liest nur und ist der Diagnosebefehl: Wo die anderen eine Datenbank ablehnen, die sie nicht lesen können, öffnet dieser sie trotzdem und sagt Ihnen, warum.

Übersicht

kent verify <dbfilename>

Eine Datenbank, die übereinstimmt

$ kent verify mydata.sqlite
Database:  mydata.sqlite

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

Eine Datenbank, die abweicht

Jeder Unterschied ist eine Zeile, und die Anzahl steht am Ende noch einmal, damit auch ein langer Bericht lesbar bleibt. Dies ist eine unter Schema 1 geschriebene Datenbank, geprüft von einem Build, der Schema 2 anlegt:

$ 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

Eine Spalte, die die Datenbank hat und Cordelia nicht anlegt, wird genauso gemeldet; das sehen Sie, wenn etwas außerhalb von Cordelia in die Datei geschrieben hat:

$ 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

Er liest eine Datenbank, die die anderen ablehnen

info, details, files, activities und sports lehnen alle eine Datenbank ab, deren user_version älter ist als erwartet. verify tut das nicht, und zwar absichtlich: Eine falsche Version ist genau der Fall, den er diagnostizieren soll, also würde ein Verweigern ihn nutzlos machen, wenn man ihn braucht.

Was er nicht prüft

Er vergleicht Struktur, nicht Inhalt: Tabellen, Spalten und ihre deklarierten Typen sowie die Schemaversion. Er prüft weder die Daten in den Zeilen noch, ob SQLites eigenes Dateiformat intakt ist. Für Letzteres ist SQLites PRAGMA integrity_check das richtige Werkzeug.

Er meldet außerdem nur Unterschiede in Tabellen, die die Datenbank hat. Eine von Cordelia definierte Tabelle, die diese Datenbank nie angelegt hat, ist kein Befund, denn eine Datenbank legt nur an, was ihre importierten Daten brauchten. Das ist normal, und die veröffentlichten Sportdatenbanken sind alle so: 14 Tabellen von den 128, die das Schema definiert.

Exit-Codes

0, wenn nichts abweicht, 1, wenn irgendetwas abweicht. Damit ist er als Test in einem Skript brauchbar, und deshalb gibt er neben den Zeilen auch eine Anzahl aus.

Siehe auch