Ce face PRAGMA integrity_check
PRAGMA integrity_check parcurge toată baza și verifică structura internă: pagini lipsă sau folosite de două ori, indexuri care nu corespund tabelului, rânduri care încalcă NOT NULL sau CHECK. Dacă totul este corect, întoarce un singur rând cu textul ok; altfel, câte un rând pentru fiecare problemă (maxim 100 implicit).
PRAGMA quick_check face aproape aceleași verificări, dar nu compară indexurile cu tabelele, așa că este mult mai rapid pe baze mari. Nu verifică cheile străine: pentru ele există PRAGMA foreign_key_check.
Rulează verificarea după o oprire bruscă, după copierea fișierului sau înainte de un backup important. Dacă găsește erori, poți încerca să salvezi datele cu .dump sau .recover în utilitarul sqlite3.
Parametri
| Parametru | Descriere |
|---|---|
N |
Numărul maxim de erori raportate (implicit 100). |
tabel |
Verifică doar un tabel și indexurile lui (SQLite 3.33.0+). |
Exemple
Exemplul 1: O bază sănătoasă
.open magazin.db
CREATE TABLE produse (nume TEXT NOT NULL, pret INTEGER CHECK (pret > 0));
CREATE INDEX idx_pret ON produse (pret);
INSERT INTO produse VALUES ('Caiet', 12), ('Pix', 5);
PRAGMA integrity_check;
PRAGMA quick_check;
Rezultat
╭─────────────────╮
│ integrity_check │
╞═════════════════╡
│ ok │
╰─────────────────╯
╭─────────────╮
│ quick_check │
╞═════════════╡
│ ok │
╰─────────────╯
Exemplul 2: Un rând care încalcă CHECK
PRAGMA ignore_check_constraints permite temporar inserarea unui preț negativ (ca un import vechi, făcut fără verificări). integrity_check găsește apoi rândul care încalcă regula.
CREATE TABLE produse (nume TEXT NOT NULL, pret INTEGER CHECK (pret > 0));
PRAGMA ignore_check_constraints = ON;
INSERT INTO produse VALUES ('Radieră', -3);
PRAGMA ignore_check_constraints = OFF;
PRAGMA integrity_check;
Rezultat
╭────────────────────────────────────╮
│ integrity_check │
╞════════════════════════════════════╡
│ CHECK constraint failed in produse │
╰────────────────────────────────────╯
Greșeli frecvente
- Rulezi
integrity_checkla fiecare pornire a unei aplicații cu o bază mare. Verificarea citește tot fișierul; foloseștequick_checksau rulează verificarea rar, de exemplu înainte de backup. - Crezi că
okînseamnă că și cheile străine sunt corecte. Rulează separatPRAGMA foreign_key_check.
Comenzi înrudite
PRAGMA foreign_keys: Pornește verificarea cheilor străine. În SQLite este oprită implicit și trebuie pornită la fiecare conexiune.VACUUM: Reconstruiește fișierul bazei de date: eliberează spațiul rămas după ștergeri și, cu INTO, face o copie compactă..dump: Scrie toată baza de date (sau doar unele tabele) ca instrucțiuni SQL, bune pentru backup, transfer sau control al versiunilor.PRAGMA journal_mode (WAL): Alege cum protejează SQLite datele la scriere. Modul WAL permite citiri în timp ce altcineva scrie și este alegerea uzuală pentru aplicații.