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íznak | Príčina |
|---|---|
database is locked | Chýba WAL alebo busy_timeout, alebo druhý proces drží dlhú transakciu |
attempt to write a readonly database | Chýbajú práva k súboru alebo adresáru |
disk I/O error | Došlo miesto na disku — skontroluj kruh využitia disku v „Prehľade“ |
| Databáza rastie po vymazaní riadkov | Miesto 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.dbsa dá stiahnuť cez priamy odkaz, spolu so všetkými heslami a používateľskými údajmi.