Adding a new column can be a small schema change or a breaking event for production systems. The difference comes down to how you plan, run, and deploy it. In modern databases—PostgreSQL, MySQL, SQLite—the ALTER TABLE ... ADD COLUMN command is the simplest way to extend a table. Yet simplicity in syntax hides complexity in scale.
Before you add the column, decide the data type. Align it with your domain model. Use NOT NULL only if you can populate it immediately. Adding a non-null column without a default will fail. Adding one with a default on a large table can lock writes and reads.
In PostgreSQL, ALTER TABLE users ADD COLUMN last_login TIMESTAMP WITH TIME ZONE; works, but on heavy traffic systems it can create contention. To avoid downtime, add the column as nullable first, backfill in batches, then alter constraints. For MySQL, the same logic applies, though ONLINE DDL features can reduce locks.
Think about indexes. Do not create them in the same migration as the new column if the table is large. Each index build is its own I/O cost. Schedule it separately.