Как конвертировать mysql в postgresql? [закрыто]


14

Я отчаянно ищу инструмент преобразования для преобразования большой базы данных MySQL в Postgresql. Мне нужен инструмент / скрипт, чтобы:

  • Свободно
  • Работает под Linux
  • Прост в использовании и не глючит
  • Вы на самом деле пытались и подтвердить, что работает
  • Желательно, не написано с Java или Ruby

Я пробовал разные инструменты, перечисленные здесь , но ни один не работал для меня.

Заранее спасибо.


Я не эксперт PostgreSQL, все еще учусь сам. Я удалил свой ответ. Однако есть еще один вопрос об использовании mysqldump с postgresql, опубликованный кем-то другим: dba.stackexchange.com/q/9792/877 . Надеюсь, это поможет !!!
RolandoMySQLDBA

1
Что не так с инструментами, написанными на Java? И это могло бы помочь, если бы вы описали, что именно « не работает » со всеми из них.
a_horse_with_no_name

Ответы:


7

Миграция между двумя очень разными СУБД требует гораздо большего, чем просто миграция данных. Но миграция данных обычно самая легкая часть.

Способ, который я попробовал, который является бесплатным, и я могу подтвердить, что он работает:

  • создать дамп только для схемы mysql
  • Настройте SQL с помощью текстового редактора и много поиска и замены
  • запустить преобразованный SQL в Postgres
  • Создание простого текстового дампа из MySQL (например, CSV или другой формат с разделителями)
  • импортировать данные с помощью команды COPY PostgreSQL

Импортировать данные на самом деле может быть сложно, если вы полагаетесь на поведение MySQL, принимающее недопустимые данные (например, 31 февраля)

Я предполагаю, что это будет быстрее, чем поиск инструмента, оценка множества из них и затем попытка понять тот, который вы выбрали. Но это зависит от того, какой "большой" вы имеете в виду. Если большой размер таблицы составляет несколько сотен, это может оказаться невозможным. Если большой относится только к числу строк, то это, вероятно, самый быстрый способ сделать это.

Существуют некоторые инструменты, которые могут выводить схему базы данных в формате, независимом от СУБД (XML), например Liquibase , SchemaSpy или WbSchemaReport . С Liquibase, вероятно, является самым простым в использовании. Другим потребуется ручная работа по написанию / расширению XSLT для преобразования сгенерированного XML.

Если вы используете триггеры и хранимые процедуры в MySQL, я не верю, что найдется какой-либо автоматизированный инструмент, который сможет их перевести, не требуя серьезного ручного исправления впоследствии - и тогда сгенерированные процедуры, вероятно, не будут использовать какие-либо расширенные функции целевой СУБД ,


6

Я должен был сделать это недавно, и, поскольку поиск инструмента и возможность что-то с ним делать заняли бы слишком много времени, я делал это за руку с помощью vim и substitution-foo.

  • заменить INT NOT NULL AUTO_INCREMENT(или что-нибудь подобное) наSERIAL
  • изменить everythig строку , связанную в TEXT(разница не скорости при помощи TEXT, VARCHARили аналогичный)
  • чтобы избавиться от тех , F *** ING обратных кавычек `
  • в Postgres нет хранилищ, поэтому удалите ENGINE InnoDB(или что-то еще)
  • удалять UNSIGNED
  • каждое поле BLOB BYTEA
  • строки используют одинарные кавычки 'и ничего больше
  • будьте осторожны, если вы где-нибудь используете конкатенацию строк, начиная с 9.1, поддержка Postgres CONCATкак запасной вариант для нестандартной конкатенации строк, до 9.1 это было сделано с помощью 'string' || ' string'
  • переписать любой процедурный код ...
  • заботиться об именах, которые зарезервированы (например, таблица, имя, ...), а также имена в верхнем регистре. Они должны быть в двойных кавычках"
  • Индексирование должно быть почти таким же, так как синтаксис не меняется
  • Для всего, что я забыл, проверьте викибуки на эту тему

Каждая из этих пуль должна быть сделана с одной заменой.

Я экспортировал схему и данные отдельно . Убедитесь, что вы используете INSERTs вместо COPY. Если ничего не происходит, данные не должны (почти) очищаться. Убедитесь, что все включено UTF-8. С двумя отдельными файлами схема становится более управляемой, и у вас нет 1 ГБ файла для редактирования.

При загрузке схемы вы получаете довольно подробную информацию об ошибке, поэтому отладка должна быть довольно простой.


Привет, как преобразовать данные поля BLOB MySQL в BYTEA PostgreSQL? Я обнаружил, что если я дам дамп данных Mysql как вставка sql, я не могу загрузить данные в PostgreSQL.
Франк

1

Я добавляю это туда, никогда не пробуя , но Tungesten Replicator может делать то, что вы хотите. Это в первую очередь инструмент репликации, но я думаю, что он может иметь процесс начальной загрузки, который может помочь вам, по крайней мере, с частью данных.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.