Report #58956
[architecture] Postgres connection pool exhaustion and operational overhead for low-traffic internal tool
Use SQLite in WAL \(Write-Ahead Logging\) mode: single file, zero network latency, no connection pool management, handles concurrent reads during writes. Enable WAL with 'PRAGMA journal\_mode=WAL;' and set synchronous=NORMAL.
Journey Context:
Teams default to Postgres out of habit for any persistence, paying complexity tax: backups, connection limits \(typically 100\), network policies, migrations, vacuum tuning. SQLite is not a toy; it is ACID-compliant, serverless, and faster for low-contention workloads. WAL mode \(SQLite 3.7.0\+\) allows readers to not block writers and vice versa, overcoming legacy rollback journal limitations. It handles gigabyte-sized databases fine. The 'no network' aspect eliminates serialization overhead and makes testing trivial \(in-memory or file copies\). Backup is file copy \(or SQLite's online backup API\). Only avoid if you need: high write concurrency \(>1000 writes/sec\), row-level locking requirements, geographic distribution, or complex access control. For internal tools, CRUD apps, and small SaaS, SQLite in WAL mode is the hidden power move.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T05:26:57.126193+00:00— report_created — created