Як конвертувати базу даних MySQL в PostgreSQL?


20

Чи є інструмент командного рядка для перетворення бази даних MySQL в PostgreSQL? Я також хотів би знати, чи є спосіб перетворити базу даних за допомогою звичайної mysqldumpкоманди.



4
Щоразу, коли я це бачу, плачу сльози радості.
rfusca


Це легко одне з найкорисніших питань на всьому цьому сайті.
Еван Керролл

Відповіді:


13

ти намагався:

mysqldump --compatible=postgresql dbname > export.sql

то зробіть це, щоб уникнути цитат

sed "s/\\\'/\'\'/g" export.sql > export1.sql

може знадобитися ще масаж, тому уважніше подивіться на mysqldump doco.


2
Я вже спробував метод, який ви вже ввели, але він дає помилку під час відновлення в postgresql
Mughil

2
@Mughil, що таке помилка?
Janus Troelsen

4
5 років і ще ніхто не виправлений mysqldump. syntax error at or near "(" LINE 2: "id" int(10) NOT NULL,
Cees Timmerman

1
За даними dev.mysql.com/doc/refman/8.0/en/…, єдине дозволене значення для --compatibleцьогоansi
phunehehe

7

Ось кілька інструментів з відкритим кодом, які можуть бути дуже корисними:

FromMySqlToPostgreSql - це інструмент, що охоплює особливості, і дуже простий у використанні.
Він відображає типи даних, мігрує обмеження, індекси, ПК та FK точно так, як вони були у вашому MySQL db.
Під кришкою він використовує PostgreSQL COPY, тому передача даних відбувається дуже швидко.
FromMySqlToPostgreSql написаний на PHP (> = 5.4).

pgloader   - це інструмент завантаження даних для PostgreSQL, використовуючи команду COPY. Його головна перевага перед просто використанням

COPY
або
\copy
, і понад використання іноземного пакувальника даних - це поведінка транзакцій, де pgloader зберігатиме окремий файл відхилених даних, але продовжує намагатися копіювати хороші дані у вашу базу даних. Поведінка PostgreSQL за замовчуванням є транзакційною, а це означає, що будь-яка помилкова лінія у вхідних даних (файл або віддалена база даних) зупинить усе масове навантаження для таблиці. pgloader також реалізує переформатування даних, типовим прикладом цього є перетворення даних MySQL дат 0000-00-00 та 0000-00-00 00:00:00 до PostgreSQL
NULL
значення (тому що в нашому календарі ніколи не було нуля року).
pgloader написаний у LISP та розповсюджений як вихідний код, тому вам потрібно скомпілювати його перед використанням.

Сподіваюся, це допоможе вам ...


1
pgloader навіть рекомендований інструмент міграції в документах postgre, тому я б сказав, що це найкращий вибір. Я використовував це з успіхами на досить невеликому БД з 50+ таблицями, працював як шарм.
Капай

3

Насправді існує безкоштовний інструмент міграції, який досить простий у використанні, розроблений самими EnterpriseDB. Його можна встановити за допомогою StackBuilder: Migration Toolkit


3

Нещодавно я використовував невільний інструмент від DBConvert для перетворення бази даних доступу до постгресів, і вважав, що це коштує грошей порівняно з кількістю часу, який я витрачав, намагаючись зробити це надійно безкоштовно. Продам аналогічний інструмент для MySQL <-> postgres , який я не використовував, але, можливо, варто розглянути, якщо вас не цікавлять лише інструменти командного рядка.

У випадку, якщо вам цікаво, я жодним чином не пов’язаний з ними :-)


3

Наприклад, ви можете використовувати майстер міграції EnterpriseDB.

Він може з силою мігрувати OracleDB. Але для Mysql він має деякі обмеження, наприклад, він не підтримує перегляди, тригери, збережені процедури.

Докладніше див . У посібнику з міграції EDB . Не впевнений, але можна мігрувати mysql-> oracle-> postgresql, зберігаючи збережені вами процедури (якщо вони існують).

Зігніть це: Інструменти міграції баз даних та SQL


1

Це лише для того, щоб додати до існуючих відповідей, які допомогли мені знайти це рішення. Я використав FromMySqlToPostgreSql . Все, що вам потрібно зробити, це завантажити та витягнути FromMySqlToPostgreSql , зробити копію зразкового конфігураційного файла, встановити в ньому значення db-з'єднання та запустити файл індексу за допомогою наступної команди:

php index.php config.xml

Простий, але ефективний!


Чи можете ви відредагувати свою публікацію за допомогою посилання на цей інструмент, будь ласка?
дезсо

Вибач, я забув це. Додано!
toing_toing

Ах, це смішно. Ви зрозуміли, що автор інструменту також опублікував відповідь? ;) Тепер я.
dezso

Я лестощі! Хоча він не дуже багато розповів про свій чудовий плагін.
toing_toing

0

Існує інструмент з відкритими джерелами, який надає функціональні можливості для перетворення DB MySQL в db Postgresql db, включаючи індекси, fks і дані.

https://github.com/ggarri/mysql2psql

Цей інструмент також дозволяє визначити зміни схеми, щоб ви могли виконати деякі оновлення вашої поточної схеми за час виконання.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.