Adding a new column sounds trivial, but it can break systems if done wrong. The goal is zero downtime, no data loss, and predictable rollout. This means planning for schema changes the same way you plan for code deployments.
When you add a new column in SQL—whether in PostgreSQL, MySQL, or any other relational database—you have to think about locks. Adding a column with a default value in older database versions can lock the entire table, freezing writes. In large tables, that can stall production for minutes or hours. The simplest, safest method is to add the column without defaults, deploy that change, and then run a background job or migration script to fill in values.
If your ORM supports migrations, check if it creates defaults inline or in a separate statement. Many frameworks make unsafe changes by default. Test migrations against production-sized data in staging. Time the operation. Watch for replication lag. Monitor indexes and triggers; adding a column with an index created at the same time can block queries longer than you expect.