Report #83193
[architecture] Postgres connection pool exhaustion and operational overhead for low-write, single-node workload
Use SQLite in WAL \(Write-Ahead Logging\) mode for read-heavy, single-node applications under 1TB where concurrent writers are rare \(<10 concurrent writes/sec\). Enable litestream or similar for continuous backup to S3. Switch to Postgres only when you need row-level security, complex access control, streaming replication for high availability, or sustained >10 concurrent write transactions.
Journey Context:
Postgres requires connection pooling \(PgBouncer\) and operational maintenance \(VACUUM, WAL archiving\) which is overkill for a single-node app. SQLite is zero-config and faster for reads, but the default rollback journal blocks readers during writes. WAL mode allows concurrent reads during a single write, drastically improving concurrency. The 1TB limit is practical for SQLite; beyond that, vacuuming becomes painful. Litestream solves the 'single node is a single point of failure' objection by asynchronously streaming WAL to S3 with near-zero RPO. This pattern is used by Tailscale, Fly.io edge nodes, and others. Don't default to Postgres 'just in case'.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T22:13:37.368346+00:00— report_created — created