The schema was locked, but the requirements changed. Now you need a new column.
Adding a new column should be simple, but in production databases, nothing is simple. The data is live. The queries are running. Downtime is not an option. A careless migration can block writes, break code, or corrupt data. That’s why every step must be deliberate.
First, define the purpose and type of the new column. Decide whether it must allow NULL values, have a default, or be indexed. If it needs a non-null constraint, add it only after backfilling data to avoid failures on insert.
Second, use an additive change. Altering a large table can lock it, so use operations that are non-blocking where possible. In MySQL, add the column with ALTER TABLE … ALGORITHM=INPLACE. In PostgreSQL, adding a nullable column is fast, but adding one with a default can rewrite the table unless you use DEFAULT ... with NOT NULL in separate steps.