The Friday-meeting story
Every team that has ever shared a Google Sheet of "real" data has lived this: Monday, two people paste rows simultaneously and one set vanishes. Tuesday, a column gets renamed and a downstream script breaks silently. Thursday, somebody types "N/A" where a number should live, and now SUM returns a string error. Friday, an emergency meeting decides to "clean up" the sheet — which is to say, hand-edit hundreds of rows.
Spreadsheets and CSVs fail at scale not because they are stupid but because they were never designed to enforce three things production data needs every second: concurrency control (who wins when two writers collide), data integrity (refuse rows that violate the schema), and efficient querying (find a row in 50ms among 50 million).
What the database does instead
PostgreSQL refuses bad rows at insert time. Two transactions cannot both win. Indexes turn linear scans into logarithmic lookups. The ACID guarantees that the rest of this quest unpacks are not academic — they are the difference between Friday meetings and "it just works."
When CSVs are still right
Files are great for data interchange (export, sharing, archival) and for config. They stop being great the moment more than one process writes to them or you need to ask non-trivial questions about them. The instinct to reach for a database is exactly: "more than one writer, or more than trivial queries."