Я отчаянно ищу инструмент преобразования для преобразования большой базы данных MySQL в Postgresql. Мне нужен инструмент / скрипт, чтобы:
- Свободно
- Работает под Linux
- Прост в использовании и не глючит
- Вы на самом деле пытались и подтвердить, что работает
- Желательно, не написано с Java или Ruby
Я пробовал разные инструменты, перечисленные здесь , но ни один не работал для меня.
Заранее спасибо.
mysql
postgresql
linux
НВР
источник
источник
Ответы:
Миграция между двумя очень разными СУБД требует гораздо большего, чем просто миграция данных. Но миграция данных обычно самая легкая часть.
Способ, который я попробовал, который является бесплатным, и я могу подтвердить, что он работает:
Импортировать данные на самом деле может быть сложно, если вы полагаетесь на поведение MySQL, принимающее недопустимые данные (например, 31 февраля)
Я предполагаю, что это будет быстрее, чем поиск инструмента, оценка множества из них и затем попытка понять тот, который вы выбрали. Но это зависит от того, какой "большой" вы имеете в виду. Если большой размер таблицы составляет несколько сотен, это может оказаться невозможным. Если большой относится только к числу строк, то это, вероятно, самый быстрый способ сделать это.
Существуют некоторые инструменты, которые могут выводить схему базы данных в формате, независимом от СУБД (XML), например Liquibase , SchemaSpy или WbSchemaReport . С Liquibase, вероятно, является самым простым в использовании. Другим потребуется ручная работа по написанию / расширению XSLT для преобразования сгенерированного XML.
Если вы используете триггеры и хранимые процедуры в MySQL, я не верю, что найдется какой-либо автоматизированный инструмент, который сможет их перевести, не требуя серьезного ручного исправления впоследствии - и тогда сгенерированные процедуры, вероятно, не будут использовать какие-либо расширенные функции целевой СУБД ,
источник
Я должен был сделать это недавно, и, поскольку поиск инструмента и возможность что-то с ним делать заняли бы слишком много времени, я делал это за руку с помощью vim и substitution-foo.
INT NOT NULL AUTO_INCREMENT
(или что-нибудь подобное) наSERIAL
TEXT
(разница не скорости при помощиTEXT
,VARCHAR
или аналогичный)`
ENGINE InnoDB
(или что-то еще)UNSIGNED
BYTEA
'
и ничего большеCONCAT
как запасной вариант для нестандартной конкатенации строк, до 9.1 это было сделано с помощью'string' || ' string'
"
Каждая из этих пуль должна быть сделана с одной заменой.
Я экспортировал схему и данные отдельно . Убедитесь, что вы используете
INSERT
s вместоCOPY
. Если ничего не происходит, данные не должны (почти) очищаться. Убедитесь, что все включеноUTF-8
. С двумя отдельными файлами схема становится более управляемой, и у вас нет 1 ГБ файла для редактирования.При загрузке схемы вы получаете довольно подробную информацию об ошибке, поэтому отладка должна быть довольно простой.
источник
Я добавляю это туда, никогда не пробуя , но Tungesten Replicator может делать то, что вы хотите. Это в первую очередь инструмент репликации, но я думаю, что он может иметь процесс начальной загрузки, который может помочь вам, по крайней мере, с частью данных.
источник