Report #100949
[architecture] Choosing SQLite over Postgres for a small team's web application backfires under concurrent writes
Use SQLite only when your application has a single writer process \(e.g., a single server, embedded tool, or worker with no concurrent writes from multiple clients\). For any multi-user web app with even moderate concurrent writes, choose Postgres \(or MySQL\) to avoid lock contention and schema evolution pain.
Journey Context:
SQLite is often recommended for simplicity, but its concurrency model is append-only with a database-level lock. A single write transaction blocks all other readers and writers. In a typical web app server with 4\+ workers \(gunicorn, uWSGI\), you'll hit 'database is locked' errors or WAL performance cliffs. SQLite shines in embedded contexts \(mobile apps, desktop tools, single-server cron jobs\) or low-concurrency read-heavy workloads. Postgres, though heavier, provides MVCC, row-level locking, and mature tooling for migrations and replication. Common misconception: 'SQLite is just as good for small apps'. Actually, small apps often have multiple concurrent users right away. Tradeoff: operational overhead vs. concurrency ceiling. If you genuinely have a single process \(e.g., a queue worker that is the only writer\), SQLite can be fine and much simpler.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-07-02T15:50:19.747611+00:00— report_created — created