Adding a new column should be simple. You define the schema change, update the queries, and deploy. But in production systems, even small schema changes can trigger outages, corrupt data, or break downstream consumers. A new column in a table changes the contract between your database and every piece of code that touches it.
When introducing a new column in PostgreSQL, MySQL, or any relational database, you need to account for default values, nullability, indexing, and the performance hit during migration. Adding a column with a default in older PostgreSQL versions rewrites the entire table, locking it for the duration. In high-traffic environments, that means downtime unless you stage it: first add the column as nullable, backfill in batches, then add constraints and defaults.
For analytics databases, a new column might propagate upstream to ETL pipelines, data warehouses, and dashboards. If your schema is part of a contract with external services via APIs or CDC streams, the change must be versioned. Even if the database accepts the new column instantly, your integrations and queries may not.