Migration guides
Everything we know about moving data between MySQL and PostgreSQL — free to read, automated by the converter.
Getting started
- How to export a MySQL dump (mysqldump)
- How to export a PostgreSQL dump (pg_dump)
- Fix the "not a valid MySQL dump" upload error
- Fix a live transfer: "produced no tables" & connection errors
- Reset PostgreSQL sequences after importing data
- Conversion API for scripts & CI
- Plans & pricing
Cloud database migrations
Framework migrations
- Migrate a Laravel app from MySQL to PostgreSQL
- Migrate a Django project from MySQL to PostgreSQL
- Migrate a Rails app from MySQL to PostgreSQL
- WordPress on PostgreSQL: honest limits
- Switch Prisma (Node.js) from MySQL to PostgreSQL
Choosing & planning
- MySQL vs PostgreSQL in 2026: which to pick
- pgloader vs manual migration vs SwapSQL
- AUTO_INCREMENT vs sequences vs identity columns
Common migration errors, fixed
- Fix: Unknown collation 'utf8mb4_0900_ai_ci'
- Fix: Invalid default value for date column (0000-00-00)
- Fix: pgloader "fell through ECASE expression" on MySQL 8
- Fix: psql "invalid command \restrict" when importing a dump
- Fix: MySQL server has gone away during import
- Fix: role "xyz" does not exist when importing a PostgreSQL dump
- Fix: ERROR 1449 — the user specified as a definer does not exist
- Fix: ERROR 1118 — Row size too large when creating tables
- Fix: "Incorrect string value" when importing into MySQL
- Fix: ERROR 1071 — Specified key was too long; max key length is 767 bytes
- Fix: ERROR — value too long for type character varying(n)
MySQL → PostgreSQL type guides
Full table: MySQL → PostgreSQL mapping
- TINYINT(1) → boolean
- INT UNSIGNED → bigint
- DATETIME → timestamp
- TIMESTAMP → timestamptz
- ENUM → CREATE TYPE … AS ENUM
- SET → text[]
- JSON → json / jsonb
- TINYTEXT … LONGTEXT → text
- BLOB / VARBINARY → bytea
- DECIMAL(p,s) → numeric(p,s)
- AUTO_INCREMENT → sequence / identity
- FLOAT / DOUBLE → real / double precision
- VARCHAR(n) → varchar(n)
PostgreSQL → MySQL type guides
Full table: PostgreSQL → MySQL mapping