The migration finished at 3:04 a.m. You ran the script, watched the logs scroll, and saw one line that mattered: ALTER TABLE users ADD COLUMN status TEXT; The new column was there. Silent, empty, and waiting.
Adding a new column is one of the most common database schema changes, but it is rarely just that. Once created, it changes queries, APIs, indexes, performance, and sometimes the structure of the code itself. Whether in PostgreSQL, MySQL, or SQLite, an ALTER TABLE ... ADD COLUMN operation forces you to think about data type choice, nullability, and defaults before you hit enter.
In PostgreSQL, adding a nullable column without a default is instant. With a default or a NOT NULL constraint, the database will rewrite the entire table, locking writes until it finishes. In MySQL, adding a column can be online or blocking, depending on the engine and configuration. SQLite rewrites the table every time. The wrong choice under load can stall production traffic.