Skip to content

pgferry

Deterministic schema conversion, resumable COPY loads, and the operator controls you need when the source database is messy.
MySQL 5.7+SQLiteMSSQL 2017-2025PostgreSQL targetChunked COPYPlan before migrate

Most migration tools are fine until the schema gets ugly: generated columns, unsupported indexes, collations, extension-backed types, or the first interruption halfway through a bulk copy. pgferry was built for that failure mode.

One config file

Use one TOML file to define source, target, hooks, validation, type mapping, and cutover behavior.

Preflight first

pgferry plan finds unsupported objects and generates hook skeletons before PostgreSQL is touched.

Resume when reality happens

Checkpointed chunking means long migrations can survive network failures and operator mistakes.

Modern edge cases included

PostGIS, citext, generated columns, source-specific type mapping, and bounded post-load parallelism are all first-class.

Introspection that errs on the side of honesty

Source schema analysis reports unsupported types, generated columns, skipped indexes, views, routines, and triggers that need manual handling.

COPY performance with control

Chunked range planning for eligible tables, worker pools for the hot path, and bounded index creation during post-migration cleanup.

Operational escape hatches

Hooks at four phases, schema_only and data_only modes, orphan cleanup, snapshot options, and configurable defaults preservation.

Validation instead of vibes

Optional row-count checks and explicit logging reduce the number of surprises left for cutover day.

Terminal window
pgferry plan migration.toml
pgferry migration.toml
  1. Inspect the source and generate a preflight report.
  2. Fill in hooks for views, routines, or custom data cleanup.
  3. Run the migration with chunking, checkpoints, and optional validation.
  4. Review post-load objects, row counts, and extension-backed features before cutover.
SourceDriverWorkersSnapshot mode
MySQLgo-sql-driver/mysqlParallelnone, single_tx
SQLitemodernc.org/sqliteSequentialnone
MSSQLgo-mssqldbParallelnone, single_tx