Blog

Notes from the migration trenches

Engineering deep-dives, migration guides, and the occasional war story — written by the team building DBShifts.

GuidesJune 12, 2026·9 min read

Relational to Non-Relational: Moving SQL Data into a Document Model

Tables don't become collections by renaming them. Foreign keys, JOINs, transactions and fixed schemas all need a deliberate translation — here's how to think about each one before you migrate.

Read article
GuidesJune 7, 2026

Leaving Oracle for PostgreSQL: A Field Guide

License pressure makes the decision; the data model details make the project. NUMBER precision, empty-string NULLs, identifier casing, PL/SQL — what actually changes when you move Oracle workloads to Postgres.

8 min read
ProductMay 30, 2026

Big-Bang, Trickle, or CDC: Choosing Your Migration Strategy

Every database migration is one of three shapes. The right one depends on two numbers: how much downtime you can afford, and how fast your source data changes.

6 min read
ProductMay 16, 2026

Masking PII in Flight: Production Data Without Production Risk

The fastest way to leak customer data is copying production into staging. Masking during migration — not after — closes the window where real PII sits exposed in a lower environment.

6 min read
ProductApril 28, 2026

Rehearse the Migration: Dry Runs, Quarantine, and Rollback

A migration you've only run once — in production, under pressure — is a gamble. The teams that migrate calmly all do the same three things: rehearse, isolate failures, and keep the exit open.

6 min read
EngineeringJune 11, 2026

How We Live-Certified All 49 Database Migration Paths

Seven engines, forty-nine source→target combinations, one rule: a pair isn't supported until a real migration of real data passes row counts and checksums. Here's how our certification harness works.

8 min read
GuidesJune 4, 2026

MySQL to PostgreSQL: The Migration Checklist That Actually Matters

TINYINT(1) booleans, unsigned integers, ENUMs, zero dates, AUTO_INCREMENT sequences — the eight type conversions that decide whether your MySQL → PostgreSQL migration is correct or silently wrong.

7 min read
EngineeringMay 28, 2026

The Hidden Data-Loss Traps in Cross-Engine Migration

An unsigned TINYINT that clips 255 to 127. A VARBINARY that silently keeps one byte. A NUMERIC that rounds through float64. Five real bugs our certification harness caught — all of them silent.

9 min read
ProductMay 20, 2026

Zero-Downtime Migration with Change Data Capture

Bulk-copy a live database and you've copied a moving target. CDC closes the gap: snapshot, stream the changes that happened meanwhile, stay in sync until cutover. Here's the architecture.

7 min read
EngineeringMay 12, 2026

Why Row Counts Aren't Enough: Type-Aware Checksum Validation

Matching row counts prove you moved the right number of rows — not the right rows. How DBShifts hashes every row on both sides of a migration, across engines that can't even agree what a value looks like.

8 min read
GuidesMay 5, 2026

Migrating MongoDB to SQL (and Back) Without Losing Your Schema

Documents don't have a schema — until you need one. How DBShifts infers relational structure from collections, handles Decimal128 and nested documents, and goes the other direction too.

6 min read
GuidesApril 10, 2026

What Is Database Migration? A Plain-English Guide

Database migration is moving data from one database to another — between engines, versions, servers, or clouds — without losing or corrupting it. Here's what it involves, why it's harder than copying files, and how the process actually works.

7 min read