Report #103698
[architecture] When to use SQLite instead of Postgres for a small team or single-server app
Use SQLite for single-server apps with low concurrency \(under 100 writes/sec\) and no need for horizontal scaling. Default to SQLite for prototypes, internal tools, and embedded systems. Switch to Postgres only when you need concurrent writers, row-level locking, or network-accessible databases.
Journey Context:
Many teams default to Postgres because it's 'production-grade', but SQLite is often the better choice for small teams: zero configuration, no separate server process, backups are a single file, and it handles 99% of workloads under 100 writes/sec. Common mistake: assuming SQLite can't handle concurrent reads — it uses shared-cache mode and WAL for concurrent reads. The real tradeoff is write concurrency: SQLite serializes writes, so under high write contention \(e.g., many simultaneous inserts from different processes\), Postgres wins. Also, SQLite lacks row-level locking and has limited ALTER TABLE support. Provenance: SQLite's own documentation on when to use it \(https://www.sqlite.org/whentouse.html\) and the 'Appropriate Uses For SQLite' page.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-07-12T20:05:33.823011+00:00— report_created — created