Adding a new column to a production database should be simple. It rarely is. If the schema change locks a table for too long, traffic stalls. If the default values are wrong, you corrupt data. If the migration script isn’t idempotent, you risk replay errors during deploys. These problems multiply when the database serves millions of queries per second.
A new column means more than altering a table. It means understanding the engine’s behavior under concurrent load. In PostgreSQL, ALTER TABLE ... ADD COLUMN is fast if no default is set. In MySQL, some versions rebuild the entire table unless you use algorithms like ALGORITHM=INPLACE. On distributed systems, adding a column requires versioning both schema and code so that old services can ignore it while new ones begin to write.
To deploy safely: