A new column in a production database can help ship new features, store critical data, or unlock better queries. But the wrong approach triggers downtime, locks rows, or corrupts data. The strategy depends on the database engine, schema design, and traffic patterns.
In MySQL, adding a column with ALTER TABLE locks the table by default. For large datasets, use pt-online-schema-change or gh-ost to add a new column without blocking reads and writes. In PostgreSQL, adding a nullable column is fast, but adding one with a default value rewrites the entire table. Use a two-step migration: first add the column as nullable, then backfill in batches, then set the default and constraints.
For distributed databases like CockroachDB or Yugabyte, schema changes may be asynchronous but still require testing under real load. Always run migrations in a staging environment with realistic data. Benchmark before and after the new column is added.