← Back to Blog

AI-Assisted Database Migration Script Cost: Postgres and MySQL Schema Changes

By Eric Bush · July 4, 2026 · 9 min read

Server room with rows of database machines behind glass, symbolising production database operations

Not All Migrations Cost the Same

A one-line ALTER TABLE users ADD COLUMN age INT NULL; is cheap for an LLM to generate. A migration that adds a NOT NULL column to a 40M-row table without blocking writes is a completely different exercise: it needs a backfill strategy, a coordinated double-write with the application code, a plan for rollback, and a plan for what to do when the migration is 60% done and a query timeout fires.

This post breaks down realistic LLM cost by migration shape, on Postgres and MySQL, and highlights where the model reliably fails.

Change-Shape Taxonomy

  • Trivial: add nullable column, add non-unique index on small table, add table.
  • Medium: add index on large table (needs CONCURRENTLY or online DDL), rename column with backward compatibility, add check constraint.
  • Hard: add NOT NULL column to large table with default, change column type on hot path, denormalize a shape-heavy join.
  • Very hard: split table, merge tables, change primary key, move column across tables with FK preservation.

Cost Per Migration by Shape

Cost assumes Sonnet 5 as the generator, one initial pass, one review pass, and one "reversibility check" pass. Numbers include context loading of the current schema (typically 2-4K tokens for a mid-sized app).

Shape Postgres cost MySQL cost Typical output
Trivial$0.05-$0.10$0.05-$0.1010-30 lines SQL
Medium$0.15-$0.25$0.20-$0.3540-80 lines + rollback
Hard$0.40-$0.70$0.60-$1.00100-200 lines + phased plan
Very hard$0.80-$1.50$1.20-$2.20200-400 lines + app coordination doc

MySQL is consistently more expensive because online-DDL rules differ across storage engines and versions; the model has to generate more caveats and version-specific branches.

Why Hard Migrations Multiply Tokens

A hard migration is not one script — it is a sequence:

  1. Add new column, still nullable.
  2. Deploy app code that writes to both old and new location.
  3. Backfill old rows into the new column, in batches.
  4. Verify backfill completeness (count query, sample check).
  5. Add NOT NULL constraint (Postgres: NOT VALID + VALIDATE; MySQL: online ALTER).
  6. Deploy app code that reads only from the new location.
  7. Drop old location.

Each step needs its own SQL, plus coordination notes for the deploy pipeline. The LLM cost scales with the number of coordinated steps, not with SQL line count.

Where LLMs Silently Fail

Three recurring failure modes across Postgres and MySQL migrations:

  • Locking assumptions. LLMs frequently forget that ALTER TABLE in Postgres takes an ACCESS EXCLUSIVE lock unless you use CONCURRENTLY or version-16 non-blocking DDL. On a busy table this brings the app down.
  • Foreign-key gotchas. Adding a FK does not scan existing data in some Postgres versions unless you validate. Data integrity can be silently wrong.
  • Backfill batching. Models default to UPDATE ... WHERE id BETWEEN a AND b style batching, which is fine for sequential IDs but explodes on tables with UUID primary keys.

For every hard migration, run EXPLAIN on the generated queries before running them. It is the only way to catch the model's plan-vs-reality gaps.

Bottom Line

LLM cost for migration generation ranges from $0.05 for a trivial add-column to $2 for a table-split. That is negligible compared to the cost of a bad migration (production incident, data loss, hours of on-call time). Treat LLMs as fast draft writers for migrations, and always run the review passes plus EXPLAIN before executing.

Want to calculate exact costs for your project?

Frequently Asked Questions

How much does an AI-generated database migration cost?

Trivial migrations (add-column, small-table index) cost $0.05-$0.10 with Sonnet 5. Medium (large-table index, online rename) $0.15-$0.35. Hard (add NOT NULL to hot table, denormalization) $0.40-$1.00. Very hard (table split, PK change) $0.80-$2.20 including review passes.

Why does MySQL cost more than Postgres for AI-generated migrations?

MySQL online-DDL rules vary by storage engine and version, so the model has to generate more caveats and version-specific branches. Postgres has a cleaner CONCURRENTLY story, which shortens the output for common patterns.

What migration types silently fail with AI generation?

Locking assumptions (forgetting Postgres ACCESS EXCLUSIVE without CONCURRENTLY), foreign-key validation (adding a FK without a validate pass in some Postgres versions), and backfill batching that assumes sequential IDs but breaks on UUID primary keys.

Can I skip the review passes on database migrations?

No. Migration bugs are among the most expensive incident classes — data loss and downtime cost far more than the extra LLM tokens. Always run at least one review pass, and always run EXPLAIN on the generated queries before executing on production.

How does a hard migration scale in cost?

Hard migrations are not one script — they are a coordinated sequence: add nullable column, dual-write, backfill in batches, verify, add NOT NULL, switch reads, drop old column. LLM cost scales with the number of coordinated steps, not raw SQL line count. Expect 100-200 lines of output plus a coordination doc.