Adding a new column sounds simple. It isn’t, if you care about zero downtime, data integrity, and query performance. In production systems, schema evolution is one of the most dangerous operations you run. It touches every layer: storage, query plans, indexes, caching, and sometimes application logic.
A new column changes the shape of your data. It can trigger row rewrites, disrupt replication, and silently break integrations that expect the old schema. The cost is not just CPU and disk I/O; it’s the risk of locking a table, blocking writes, and freezing your system until the change completes.
Safe deployment starts with knowing your database engine’s behavior. In PostgreSQL, adding a nullable column with no default is fast because it updates system catalogs only. Adding a column with a default rewrites the table. In MySQL, similar rules apply, but storage engines differ. Any default value or NOT NULL constraint alters the execution cost.