What Postgres / MySQL Migration Actually Costs in 2026Real numbers from real teams. Every figure linked to source.

No other top-10 result consolidates Uber (2016), GitLab (2017-2020), Notion (2021), Heap, and Discord in one place with real context. This is that page.

The six cost components

People time
4-20 engineering weeks

Schema audit, query translation, ORM updates, CDC setup, testing, stabilisation. Largest component for almost every team.

Tooling cost
$0 to $50k+

pgloader is free. AWS DMS is metered. Striim/Qlik are commercial. Enterprise migrations with long CDC windows cost real money.

CI rewrite
1-4 weeks

Schema migration scripts, test fixtures, environment provisioning all change. CI cycle time often increases during migration.

Downtime risk
Hours to days

Blue-green or dual-write patterns can reach near-zero. Simple dump-and-load on large datasets means a weekend window minimum.

Training + runbook rewrite
2-8 weeks

Postgres MVCC and VACUUM vs MySQL InnoDB. PgBouncer vs ProxySQL. WAL vs binlog. Every DBA and SRE needs re-education.

Post-migration dip
1-4 quarters

Query plan regressions, unexpected lock patterns, VACUUM tuning, new monitoring gaps. Budget for a productive dip.

The case data (sourced)

UberPostgres to MySQL
2016
Scale
Multi-billion row, massive writes
Time
Months of prep + cutover
Motivation
Schemaless layer, write amplification fix, replication model
Context: This post predates major Postgres advances: parallel query (PG 9.6), logical replication (PG 10), declarative partitioning (PG 10-12). Context matters.
Source: eng.uber.com/postgres-to-mysql-migration
GitLabMySQL to Postgres (formal removal)
2017-2020
Scale
GitLab.com production + self-managed
Time
~9 months (announce to remove)
Motivation
Maintenance cost, Postgres-only feature investment
Context: GitLab.com was Postgres-only since 2016. 2020 announcement formally removed MySQL as supported self-managed option.
Source: about.gitlab.com/blog
HeapPostgres to Citus (sharded Postgres)
2017-2020
Scale
10M+ analytics requests/sec
Time
Multi-quarter, staged migration
Motivation
Scale-out without leaving Postgres ecosystem
Context: Not strictly Postgres-to-MySQL, but the most cited scale-out Postgres migration. Citus is Postgres, not MySQL.
Source: heap.io/blog
NotionSingle Postgres to sharded Postgres
2021-2022
Scale
Hundreds of TB, 480 logical shards
Time
~6 months active migration
Motivation
Write scale, row-level fan-out architecture
Context: Stayed on Postgres. The migration was horizontal sharding, not DB engine change.
Source: notion.so/blog/sharding-postgres-at-notion
DiscordVarious (storage layer evolution)
2022-2023
Scale
Trillions of messages
Time
Year+ across multiple phases
Motivation
ScyllaDB for messages; Postgres for relational data
Context: Discord moved message storage to ScyllaDB, not Postgres or MySQL. They kept Postgres for relational services.
Source: discord.com/blog

Migration tooling: the 2026 picture

Pricing verified against vendor pages, April 2026.

ToolDirectionCostSpeedLimits / Notes
pgloaderMySQL to PostgresFree (open source)Hours for small / medium schemasStored procedures, triggers, complex types need manual translation
AWS DMSBoth directionsPer-instance-hour + data transfer. Low hundreds to low thousands for typical migrationsFull load + ongoing CDC; enterprise migrations run weeksPricing as of April 2026; verify at aws.amazon.com/dms/pricing
StriimBoth directionsCommercial, pricing on requestReal-time CDC; enterprise gradeBudget item for enterprise; not for small teams
FivetranBoth directions (ELT pattern)Per-row pricing; budget varies widelyELT pattern; not designed for DB-to-DB zero-downtimeBetter for analytics pipeline than primary DB migration

Should you wait? The honest answer.

Most teams should wait until they have a clear pain trigger. Migrating without one is expensive insurance. Pain triggers that justify the cost:

  • Oracle license audit risk that your legal team has flagged
  • A specific feature blocker that PostGIS, JSONB indexing, or logical replication failover resolves
  • A scale wall that Postgres + Citus solves and MySQL + your current sharding does not
  • Ecosystem fragmentation where your primary tools have dropped MySQL support

Without one of those triggers, the migration cost is rarely paid back in the first 2-3 years. Choose based on the new project decision; tolerate the existing stack until the pain trigger arrives.

Schema migrations are CI cycles. If your CI bill is part of the migration cost: CI/CD Cost Calculator

Migrations often surface tech debt hidden in the old system: Tech Debt Cost

MySQL to Postgres: step-by-step playbookPostgres to MySQL: when and whyFull case studies