Skip to content
VDS · Databázy

SQLite: kedy stačí

Kde je SQLite na VPS lepšia než samostatný databázový server, ako zapnúť WAL a vyhnúť sa „database is locked“ a kedy je čas prejsť na PostgreSQL.

Aktualizované 23. augusta 2026

SQLite je databáza v jedinom súbore — žiadna služba, žiadny port, žiadne heslo. Pre bota, malý panel alebo web s občasnými zápismi je to správna voľba: nežerie pamäť, a VDS-1 má len 2 GB, a nie je čo konfigurovať.

Kedy ho použiť

Vhodné:

  • Telegram a Discord boti, počítadlá, nastavenia;
  • weby s tisíckami čítaní a desiatkami zápisov za minútu;
  • akýkoľvek projekt na jednom stroji bez plánov na druhý server.

Nevhodné:

  • viacero procesov aktívne zapisujúcich súčasne;
  • databáza väčšia ako niekoľko desiatok gigabajtov;
  • sieťový prístup z iného stroja — SQLite to jednoducho nedokáže.

V druhom a treťom prípade použi PostgreSQL alebo MySQL.

Práca so súborom

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

Súbor databázy musí žiť na lokálnom disku stroja a musí ho vlastniť používateľ aplikácie:

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

Adresár obsahujúci databázu musí byť tiež zapisovateľný: SQLite vytvára dočasné súbory -wal a -shm vedľa neho.

Potrebné nastavenia

Dve nastavenia pragma odstránia väčšinu problémov:

PRAGMA journal_mode = WAL;
PRAGMA busy_timeout = 5000;

WAL umožňuje čitateľom čítať počas prebiehajúceho zápisu — bez neho je každý čitateľ blokovaný zapisovateľom. busy_timeout prinúti klienta počkať päť sekúnd namiesto okamžitého zlyhania. Nastav ich zakaždým, keď v kóde otváraš spojenie, nie raz v konzole.

Zálohy

Súbor nemôžeš kopírovať obyčajným cp počas behu aplikácie — dostaneš poškodenú databázu. Existuje vstavaný bezpečný príkaz:

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

Daj ho do cronu a kópiu presuň mimo stroja: VPS nemá automatické zálohy ani snapshoty. Všeobecný postup nájdeš v zálohovaní databáz.

Časté chyby

PríznakPríčina
database is lockedChýba WAL alebo busy_timeout, alebo druhý proces drží dlhú transakciu
attempt to write a readonly databaseChýbajú práva k súboru alebo adresáru
disk I/O errorDošlo miesto na disku — skontroluj kruh využitia disku v „Prehľade“
Databáza rastie po vymazaní riadkovMiesto sa neuvoľňuje automaticky: VACUUM
Poškodená databáza po kopírovaníKopíroval si pomocou cp počas behu — použi výhradne .backup

Kedy migrovať

Príznaky: pravidelné chyby database is locked aj so zapnutým WAL, viacero pracovníkov aplikácie, reporty, ktorých výpočet trvá minúty. Postup presunu nájdeš v migrácii databázy.

Súbor databázy nesmie ležať v adresári, ktorý obsluhuje webový server. /var/www/app.db sa dá stiahnuť cez priamy odkaz, spolu so všetkými heslami a používateľskými údajmi.