PRAGMA integrity_check în SQLite

PRAGMA și configurare SQLite 3.0.0

Verifică dacă fișierul bazei de date este întreg: paginile, indexurile și constrângerile. Răspunde „ok” dacă totul e în regulă.

Sintaxă
PRAGMA integrity_check;
PRAGMA integrity_check(N);
PRAGMA integrity_check(tabel);
PRAGMA quick_check;

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_check la fiecare pornire a unei aplicații cu o bază mare. Verificarea citește tot fișierul; folosește quick_check sau rulează verificarea rar, de exemplu înainte de backup.
  • Crezi că ok înseamnă că și cheile străine sunt corecte. Rulează separat PRAGMA 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.