Adding a new column should be fast, safe, and predictable. In most databases, it isn’t. Migrations stall. Locks block reads and writes. Schema changes ripple across services. A badly executed alter can freeze production.
A new column is more than a field in a table. It is a change to storage, indexes, queries, and deployments. Getting it right means controlling both the definition and the rollout. The best practice is to add the column in a way that does not block traffic, then backfill data asynchronously.
In PostgreSQL, adding a column with a default value will rewrite the table, locking it. Instead, add the column nullable, deploy, and then update values in batches. In MySQL, watch for metadata locks. Use ALTER TABLE ... ALGORITHM=INPLACE where available. For large datasets, test on a copy. Know your tool’s background processing limits.