---
title: "Database migration: convert a database dump"
description: "Migrate between MySQL, MariaDB, PostgreSQL, SQL Server, SQLite and Oracle: convert a dump into a script with the same tables, keys and data, and a report of every change."
canonical: https://intosql.com/database-migration
last_updated: 2026-10-15
---

# Database migration: convert a database dump

Drop a dump from mysqldump, mariadb-dump, pg_dump, SSMS, SQL Developer or SQLcl, or a SQLite .db file, and download one script for PostgreSQL, MySQL, MariaDB, SQLite, SQL Server or Oracle with the same tables, keys, indexes and data. Every change is listed in a report, and the dump never leaves your computer.

## Every database pair

Rows are the database the dump comes from, columns the database the script is for. Each pair has its own page with the converter set up for it, the rules it applies and how to load the script.

- MySQL: [MySQL to PostgreSQL](https://intosql.com/mysql-to-postgresql), [MySQL to MySQL](https://intosql.com/mysql-to-mysql), [MySQL to MariaDB](https://intosql.com/mysql-to-mariadb), [MySQL to SQLite](https://intosql.com/mysql-to-sqlite), [MySQL to SQL Server](https://intosql.com/mysql-to-sql-server), [MySQL to Oracle](https://intosql.com/mysql-to-oracle)
- MariaDB: [MariaDB to PostgreSQL](https://intosql.com/mariadb-to-postgresql), [MariaDB to MySQL](https://intosql.com/mariadb-to-mysql), [MariaDB to MariaDB](https://intosql.com/mariadb-to-mariadb), [MariaDB to SQLite](https://intosql.com/mariadb-to-sqlite), [MariaDB to SQL Server](https://intosql.com/mariadb-to-sql-server), [MariaDB to Oracle](https://intosql.com/mariadb-to-oracle)
- PostgreSQL: [PostgreSQL to PostgreSQL](https://intosql.com/postgresql-to-postgresql), [PostgreSQL to MySQL](https://intosql.com/postgresql-to-mysql), [PostgreSQL to MariaDB](https://intosql.com/postgresql-to-mariadb), [PostgreSQL to SQLite](https://intosql.com/postgresql-to-sqlite), [PostgreSQL to SQL Server](https://intosql.com/postgresql-to-sql-server), [PostgreSQL to Oracle](https://intosql.com/postgresql-to-oracle)
- SQL Server: [SQL Server to PostgreSQL](https://intosql.com/sql-server-to-postgresql), [SQL Server to MySQL](https://intosql.com/sql-server-to-mysql), [SQL Server to MariaDB](https://intosql.com/sql-server-to-mariadb), [SQL Server to SQLite](https://intosql.com/sql-server-to-sqlite), [SQL Server to SQL Server](https://intosql.com/sql-server-to-sql-server), [SQL Server to Oracle](https://intosql.com/sql-server-to-oracle)
- SQLite: [SQLite to PostgreSQL](https://intosql.com/sqlite-to-postgresql), [SQLite to MySQL](https://intosql.com/sqlite-to-mysql), [SQLite to MariaDB](https://intosql.com/sqlite-to-mariadb), [SQLite to SQLite](https://intosql.com/sqlite-to-sqlite), [SQLite to SQL Server](https://intosql.com/sqlite-to-sql-server), [SQLite to Oracle](https://intosql.com/sqlite-to-oracle)
- Oracle: [Oracle to PostgreSQL](https://intosql.com/oracle-to-postgresql), [Oracle to MySQL](https://intosql.com/oracle-to-mysql), [Oracle to MariaDB](https://intosql.com/oracle-to-mariadb), [Oracle to SQLite](https://intosql.com/oracle-to-sqlite), [Oracle to SQL Server](https://intosql.com/oracle-to-sql-server), [Oracle to Oracle](https://intosql.com/oracle-to-oracle)

[Data types for every pair](https://intosql.com/docs/types#from-one-database-to-another)

## What is kept and what is reported

The converter reads the dump itself, without a database server, and writes the script from what it holds. Each pair's page lists the rules it applies, between 25 and 67 per pair, with the report line each one writes.

### Kept in the script

- Tables and columns, each with the closest type the target has and its length and precision.
- Primary, unique and foreign keys, indexes and defaults.
- AUTO_INCREMENT, identity and serial columns, with each row's id and the counter continuing where the dump left it.
- Every row, with dates, decimals, text and binary values as the dump holds them.

### Listed in the report

- Values the target can't hold as they are, such as a 0000-00-00 date in PostgreSQL, with the column and how many. (`invalid_date_null`)
- Types the target doesn't have, such as ENUM or INET6, with the type each one became. (`type_replaced`)
- Views, triggers, procedures, functions and events, by name: they are written in each database's own language, so they aren't converted. (`not_converted_objects`)
- Text that isn't valid in its character set, and dumps that already lost their 4-byte characters. (`invalid_utf8_replaced`)

## Measured against pgloader

The same dumps, converted and loaded by IntoSQL and by pgloader 3.6.7 on one machine (a 10-core i9-10900K with a SATA SSD), in October 2026.

- A TINYINT(1) column holding 2, -1 and -5: pgloader loads true for each one, without a warning. IntoSQL keeps the numbers and the report says why.
- A dump with a default of 'it's', a table named with a backtick, an ENUM holding the empty value and a TIME over 24 hours: pgloader stops. IntoSQL converts it and loads it.
- What pgloader loads has lost its primary, unique and foreign keys and its identities. IntoSQL keeps every one.
- A 5.3 GB dump of 30 million rows: pgloader needs it restored into a running MySQL first, which takes 18 minutes, then runs out of memory with its defaults. IntoSQL converts the dump in 10 seconds, and psql loads the script in about 3 minutes.
- Across 476 dumps from MySQL 5.5 to 9 and MariaDB 10.3 to 12, loaded into PostgreSQL 13 and 18: no load errors, and no value changed without a line in the report.

[The MySQL to PostgreSQL page](https://intosql.com/mysql-to-postgresql)

## Export the database you have

The converter reads a file, not a running server. Each database writes one with its own tools:

### MySQL

A dump from mysqldump, mysqlpump, phpMyAdmin or Adminer, as .sql or .sql.gz. --default-character-set=utf8mb4 --hex-blob --routines --triggers --events keep the most. [MySQL to PostgreSQL migration guide](https://intosql.com/docs/migrations/mysql-to-postgresql)

### MariaDB

A dump from mariadb-dump, mysqldump, phpMyAdmin or Adminer, as .sql or .sql.gz, with the same options as MySQL. [MariaDB to PostgreSQL migration guide](https://intosql.com/docs/migrations/mariadb-to-postgresql)

### PostgreSQL

A plain dump from pg_dump or pg_dumpall. A custom archive (-Fc) becomes one with pg_restore -f dump.sql, without a server. [PostgreSQL to MySQL migration guide](https://intosql.com/docs/migrations/postgresql-to-mysql)

### SQL Server

The script SSMS's Generate Scripts writes, with Types of data to script set to Schema and data. dbatools and mssql-scripter write the same. [SQL Server to PostgreSQL migration guide](https://intosql.com/docs/migrations/sql-server-to-postgresql)

### SQLite

The database file itself (.db, .sqlite, .sqlite3), or the SQL that sqlite3 app.db .dump writes. [SQLite to PostgreSQL migration guide](https://intosql.com/docs/migrations/sqlite-to-postgresql)

### Oracle

The .sql file SQL Developer's Database Export or SQLcl writes, with DDL and Insert statements. A .dmp file from exp or expdp has to be imported and exported again first. [Oracle to PostgreSQL migration guide](https://intosql.com/docs/migrations/oracle-to-postgresql)

## Questions about database migration

### Is my dump uploaded?

No. The converter runs in your browser and reads the dump from your disk in pieces, so it never leaves your computer. The desktop app and the command line convert on your computer too.

### How large can the dump be?

The converter never holds the whole dump in memory: it reads the file twice, by ranges, and writes the script as it goes. Multi-gigabyte dumps convert in the browser, in the desktop app and with the command line.

### Which versions can the dump come from?

MySQL 5.5 to 9, MariaDB 10.3 to 12, PostgreSQL 10 and later, SQL Server 2017 and later, SQLite 3.0 and later, and Oracle 11g and later. Each pair's page says which versions its script loads on.

### Do I need a running database server?

No. The converter reads the dump file itself, so the source database doesn't have to run anywhere. The script loads with the target's own client, such as psql, mysql or sqlcmd.

### What isn't converted?

Views, triggers, stored procedures, functions and events are written in each database's own language, so they are listed in the report by name instead. The tables, keys, indexes and rows are all in the script.

### Can it load the script straight into my database?

The desktop app and the intosql load command write straight into SQLite for free, and into PostgreSQL, MySQL and MariaDB with IntoSQL Pro. For SQL Server and Oracle, run the script with sqlcmd or sqlplus.
