Adding a new column should be direct and safe, but in practice, it can break deployments, lock tables, and cause downtime. Schema changes in production are deceptively complex. The cost is not just in the ALTER TABLE command—it’s in how that command runs, how it affects queries, and how it interacts with application code.
When you create a new column, you decide on type, default value, and nullability. Each choice has consequences. A NOT NULL column with a default can trigger a full table rewrite. A large table can become locked for minutes or hours. That lock can block inserts, updates, and deletes, freezing your app.
The safest way to add a new column is to make the operation non-blocking. In PostgreSQL, adding a nullable column with no default is nearly instant. You can backfill the data in small batches. Then set the default and constraint later. MySQL, with InnoDB and modern versions, supports instant or fast column addition in many cases, but the details depend on indexing and storage format.