All posts

How to Add a New Column Without Downtime in PostgreSQL and MySQL

A new column can be the smallest change in a database schema, but also the most disruptive. Done well, it’s invisible. Done poorly, it locks tables, blocks writes, and burns downtime you can't win back. Adding a new column is common in relational databases like PostgreSQL, MySQL, and MariaDB. Whether it’s for a new feature, refactoring data, or accommodating an analytics need, the steps must be deliberate. In PostgreSQL, ALTER TABLE table_name ADD COLUMN column_name data_type is straightforward

Free White Paper

Just-in-Time Access + PostgreSQL Access Control: The Complete Guide

Architecture patterns, implementation strategies, and security best practices. Delivered to your inbox.

Free. No spam. Unsubscribe anytime.

A new column can be the smallest change in a database schema, but also the most disruptive. Done well, it’s invisible. Done poorly, it locks tables, blocks writes, and burns downtime you can't win back.

Adding a new column is common in relational databases like PostgreSQL, MySQL, and MariaDB. Whether it’s for a new feature, refactoring data, or accommodating an analytics need, the steps must be deliberate. In PostgreSQL, ALTER TABLE table_name ADD COLUMN column_name data_type is straightforward, but the impact is not. Large tables can trigger full table rewrites. In MySQL, adding a column without care can lock the entire table.

To avoid downtime:

Continue reading? Get the full guide.

Just-in-Time Access + PostgreSQL Access Control: Architecture Patterns & Best Practices

Free. No spam. Unsubscribe anytime.
  • Understand the default values. Zero-cost default columns in newer PostgreSQL versions avoid table rewrites.
  • For MySQL, use ALGORITHM=INPLACE or ALGORITHM=INSTANT where possible.
  • Test schema changes on realistic datasets before production.
  • Roll out migrations with feature flags, decoupling application logic from schema changes.

For online migrations, tools like pg_online_schema_change or gh-ost can help insert a new column while traffic continues. Ensure you follow with data backfill jobs in batches, not in a single transaction. Monitor replication lag to avoid introducing drift.

Indexes on a new column should be created only after the backfill, to minimize write amplification during heavy load. Once the column is live and filled, update your ORM models or query builders, but avoid touching hot code paths until you confirm database performance stability.

A new column is not just a schema edit. It is a change to the foundation that every query rests upon. Treat it with the same caution as a code deployment, but with the extra weight of irreversible data operations.

See how you can add, backfill, and deploy a new column in minutes without downtime—check it live at hoop.dev.

Get started

See hoop.dev in action

One gateway for every database, container, and AI agent. Deploy in minutes.

Get a demoMore posts