Мой опыт работы с MySQL -> миграция Postgresql была не очень приятной, поэтому мне пришлось бы поддержать предложение Дэниела о файлах CSV.
В моем случае я заново создал схему руками , а затем импортировал все таблицы, одну за другой, используя mysqldump и pg_restore.
Итак, хотя этот дамп / восстановление может работать для данных, вам, скорее всего, не повезло с схемой. Я не пробовал никаких коммерческих решений, так что посмотри, что говорят другие люди и ... удачи!
ОБНОВЛЕНИЕ : я посмотрел код, оставленный процессом, и вот как я это сделал.
У меня была немного другая схема в моей базе данных PostgreSQL, поэтому некоторые таблицы были объединены, некоторые были разделены. Вот почему простой импорт не был возможен, и мой случай, вероятно, более сложный, чем вы описываете, и это решение может быть излишним.
Для каждой таблицы в базе данных PG я написал запрос, который выбирает соответствующие данные из базы данных MySQL. В случае, если таблица в обеих базах данных в основном одинакова, и нет соединений, это может быть так просто:
select * from mysql_table_name
Затем я экспортировал результаты этого запроса в XML, для этого вам нужно запустить его так:
echo "select * from mysql_table_name" | mysql [CONNECTION PARAMETERS] -X --default-character-set=utf8 > mysql_table_name.xml
Это создаст простой XML-файл со следующей структурой:
<resultset statement="select * from mysql_table_name">
<row>
<field name="some_field">field_value</field>
...
</row>
...
</resultset>
Затем я написал скрипт, который создает оператор INSERT для каждого элемента строки в этом XML-файле. Имя таблицы, куда нужно вставить данные, было задано в качестве параметра командной строки для этого сценария. Python-скрипт , на случай, если он вам нужен.
Эти операторы sql были записаны в файл, а затем переданы в psql следующим образом:
psql [CONNECTION PARAMETERS] -f FILENAME -1
Единственный прием в XML -> преобразование SQL - это распознавать числа и заключать их в кавычки.
Подводя итог: mysql может выдавать результаты запроса в виде XML, и вы можете использовать его.