Verificare un database con verify

Traduzione automatica provvisoria, non revisionata. In caso di dubbio, consultare la versione inglese, che è la versione di riferimento.

kent verify confronta la struttura di un database con lo schema che questa build di Cordelia creerebbe e riporta le differenze.

È di sola lettura ed è il comando diagnostico: dove gli altri rifiutano un database che non riescono a leggere, questo lo apre comunque e vi dice perché.

Sintassi

kent verify <dbfilename>

Un database che corrisponde

$ kent verify mydata.sqlite
Database:  mydata.sqlite

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

Un database che non corrisponde

Ogni differenza è una riga, e il conteggio è ripetuto alla fine perché anche un report lungo resti leggibile. Questo è un database scritto con lo schema 1, controllato da una build che crea lo schema 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

Una colonna che il database ha e che Cordelia non crea viene segnalata allo stesso modo: è quello che vedete se qualcosa di esterno a Cordelia ha scritto nel file:

$ 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

Legge un database che gli altri rifiutano

info, details, files, activities e sports rifiutano tutti un database la cui user_version è più vecchia di quanto questa build si aspetti. verify no, deliberatamente: una versione sbagliata è proprio il caso che serve a diagnosticare, quindi rifiutarsi di aprire il file lo renderebbe inutile proprio quando serve.

Che cosa non controlla

Confronta la struttura, non il contenuto: tabelle, colonne e i tipi dichiarati, più la versione dello schema. Non convalida i dati nelle righe e non controlla che il formato di file di SQLite sia integro. Per quest’ultimo, lo strumento giusto è PRAGMA integrity_check di SQLite.

Inoltre riporta solo differenze nelle tabelle che il database ha. Una tabella che Cordelia definisce e che questo database non ha mai creato non è un rilievo, perché un database materializza solo ciò di cui i dati importati avevano bisogno. È normale, e i database sportivi pubblicati sono tutti così: 14 tabelle sulle 128 definite dallo schema.

Codici di uscita

0 quando non c’è nulla di diverso, 1 quando qualcosa lo è. Questo lo rende utilizzabile come test in uno script, ed è il motivo per cui stampa un conteggio oltre alle righe.

Vedi anche