Adding a new column is one of the most common database schema changes, yet it carries real risk in any active system. A slow migration can lock tables. A careless default can cascade unnecessary writes. A poorly chosen type can block scaling later. Precision matters.
The first step is to define the column in a migration script that is idempotent and easy to roll back. Use ALTER TABLE with explicit type definitions and constraints. Avoid implicit conversions. If the column will store large text or JSON, consider whether indexing will be necessary, and apply indexes after the column is fully populated to reduce lock contention.
For live systems, run the migration in stages. Create the column first, with NULL allowed. Deploy code that writes to and reads from it conditionally. Backfill data in controlled batches to avoid transaction bloat. Once the column is populated and verified, enforce constraints and update indexes.