Skip to content
VDS · Baze podataka

SQLite: kada je dovoljan

Gde je SQLite na VPS-u bolji od zasebnog servera baze, kako da uključiš WAL i izbegneš „database is locked“ i kada je vreme da pređeš na PostgreSQL.

Ažurirano 23. avgust 2026.

SQLite je baza podataka u jednoj datoteci — bez servisa, bez porta, bez lozinke. Za bota, mali panel ili sajt sa retkim upisima, to je pravi izbor: ne troši memoriju, a VDS-1 ima samo 2 GB, i nema šta da se konfiguriše.

Kada ga koristiti

Dobar izbor:

  • Telegram i Discord botovi, brojači, podešavanja;
  • sajtovi sa hiljadama čitanja i desetinama upisa u minuti;
  • svaki projekat na jednoj mašini bez planova za drugi server.

Nije dobar izbor:

  • više procesa koji aktivno upisuju u isto vreme;
  • baza podataka veća od nekoliko desetina gigabajta;
  • mrežni pristup sa druge mašine — SQLite to jednostavno ne može.

U drugom i trećem slučaju koristi PostgreSQL ili MySQL.

Rad sa datotekom

apt install -y sqlite3
sqlite3 /srv/app/data/app.db
CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT NOT NULL);
INSERT INTO users (name) VALUES ('test');
.tables
.schema users
.quit

Datoteka baze podataka mora da bude na lokalnom disku mašine i da pripada korisniku aplikacije:

chown appuser:appuser /srv/app/data/app.db
chmod 640 /srv/app/data/app.db

Direktorijum u kome se nalazi baza podataka takođe mora da bude upisiv: SQLite pored nje pravi privremene -wal i -shm datoteke.

Obavezna podešavanja

Dve pragma postavke otklanjaju većinu problema:

PRAGMA journal_mode = WAL;
PRAGMA busy_timeout = 5000;

WAL omogućava čitaocima da čitaju dok je upis u toku — bez toga svakog čitaoca blokira onaj koji upisuje. busy_timeout tera klijenta da čeka pet sekundi umesto da odmah pukne. Postavljaj ih svaki put kada otvoriš konekciju u kodu, ne samo jednom u konzoli.

Rezervne kopije

Ne možeš da kopiraš datoteku običnim cp dok aplikacija radi — dobićeš oštećenu bazu podataka. Postoji ugrađena bezbedna komanda:

sqlite3 /srv/app/data/app.db ".backup '/srv/backups/app-$(date +%F).db'"

Stavi je u cron i prebaci kopiju van mašine: VPS nema automatske rezervne kopije niti snimke stanja. Opšti pristup je opisan u rezervne kopije baze podataka.

Česte greške

SimptomUzrok
database is lockedNema WAL ili busy_timeout, ili drugi proces drži dugu transakciju
attempt to write a readonly databaseNema dozvola na datoteci ili direktorijumu
disk I/O errorNema mesta na disku — proveri prsten zauzetosti diska u „Pregledu“
Baza raste nakon brisanja redovaProstor se ne oslobađa automatski: VACUUM
Oštećena baza nakon kopiranjaKopirao si sa cp dok je radila — koristi samo .backup

Kada migrirati

Znaci: redovne greške database is locked čak i sa uključenim WAL-om, više radnika aplikacije, izveštaji koji se računaju minutima. Za prelazak pogledaj migracija baze podataka.

Datoteka baze podataka ne sme da stoji u direktorijumu koji servira veb server. /var/www/app.db može da se preuzme preko direktnog linka, zajedno sa svim lozinkama i korisničkim podacima.