Як перетворити 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 та заміною foo

  • замінити INT NOT NULL AUTO_INCREMENT(або щось подібне) наSERIAL
  • змінити everythig рядок , пов'язану в TEXT(різниця не швидкості за допомогою TEXT, VARCHARабо аналогічний)
  • позбудьтеся тих ф *** їн задників `
  • в Postgres немає механізмів зберігання даних, тому видаліть ENGINE InnoDB(або що завгодно)
  • видалити UNSIGNED
  • кожне поле BLOB є BYTEA
  • рядки використовують одинарні лапки 'і більше нічого
  • будьте обережні, якщо ви використовуєте дещо з'єднання рядків, починаючи з 9.1, підтримка Postgres CONCATяк резервна копія для нестандартного конкатенації рядків, перш ніж 9.1 було зроблено за допомогою 'string' || ' string'
  • переписати будь-який процесуальний код ...
  • подбайте про зарезервовані імена (наприклад, таблиця, ім’я, ...), а також імена верхнього регістру. Їх потрібно подвоїти"
  • Індексований має бути майже однаковим, оскільки синтаксис не змінюється
  • Про все, що я забув, перегляньте вікі-книги на цю тему

Кожну з цих куль слід робити за допомогою однієї заміни.

Я експортував схему і дані seperatly . Переконайтеся, що ви використовуєте 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.