Как преобразовать базу данных MySQL в PostgreSQL?

20

Есть ли инструмент командной строки для преобразования базы данных MySQL в PostgreSQL? Я также хотел бы знать, есть ли способ конвертировать базу данных с помощью обычной mysqldumpкоманды.

Mughil
источник
1
Начало здесь: wiki.postgresql.org/wiki/...
a_horse_with_no_name
4
Всякий раз, когда я вижу это, я плачу слезами радости.
rfusca
ora2pg.darold.net
a_horse_with_no_name
Это легко один из самых полезных вопросов на всем этом сайте.
Эван Кэрролл

Ответы:

13

ты пробовала:

mysqldump --compatible=postgresql dbname > export.sql

затем сделайте это, чтобы избежать кавычек

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

может потребоваться больше массажа, так что посмотрите на mysqldump doco более внимательно.

Ник Кавадиас
источник
2
Я уже пробовал метод, указанный вами, но он дает ошибку при восстановлении в postgresql
Mughil
2
@Mughil в чем ошибка?
Янус Троелсен
4
5 лет и никто mysqldumpеще не исправлен . syntax error at or near "(" LINE 2: "id" int(10) NOT NULL,
Сис Тиммерман
1
В соответствии с dev.mysql.com/doc/refman/8.0/en/... единственным разрешенным значения --compatibleявляетсяansi
phunehehe
7

Вот несколько инструментов с открытым исходным кодом, которые могут быть очень полезны:

FromMySqlToPostgreSql - это инструмент с широкими возможностями и очень простой в использовании.
Он отображает типы данных, переносит ограничения, индексы, PK и FK точно так, как они были в вашей базе данных MySQL.
Под капотом используется PostgreSQL COPY, поэтому передача данных происходит очень быстро.
FromMySqlToPostgreSql написано на PHP (> = 5.4).

pgloader   - это инструмент загрузки данных для PostgreSQL, использующий команду COPY. Его главное преимущество перед использованием

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

Надеюсь, это поможет вам ...

AnatolyUss
источник
1
pgloader - это даже рекомендуемый инструмент миграции на postgre docs, так что я бы сказал, что это лучший выбор. Я использовал его с успехом на довольно маленькой БД с 50+ таблицами, работал как шарм.
Капай
3

На самом деле существует бесплатный инструмент миграции, который довольно прост в использовании, разработанный самими EnterpriseDB. Его можно установить через StackBuilder: Migration Toolkit

uygar.raf
источник
3

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

Если вам интересно, я никак не связан с ними :-)

Джек Дуглас
источник
3

Например, вы можете использовать мастер миграции EnterpriseDB.

Это может облегчить миграцию OracleDB. Но для Mysql у него есть некоторые ограничения, например, он не поддерживает представления, триггеры, хранимые процедуры.

Для получения дополнительной информации см. EDB Migration Toolkit . Не уверен, но можно выполнить миграцию mysql-> oracle-> postgresql, сохранив ваши хранимые процедуры (если они существуют).

Grep this: база данных и инструменты миграции SQL

Щербак
источник
1

Это просто добавить к существующим ответам, которые помогли мне найти это решение. Я использовал FromMySqlToPostgreSql . Все, что вам нужно сделать, это загрузить и извлечь FromMySqlToPostgreSql , сделать копию образца файла конфигурации, установить в нем значения соединения db и запустить файл индекса с помощью следующей команды:

php index.php config.xml

Простой, но эффективный!

toing_toing
источник
Не могли бы вы отредактировать свой пост со ссылкой на этот инструмент, пожалуйста?
Дезсо
Извини, я забыл это. Добавлено!
toing_toing
Ах, это смешно. Вы поняли, что автор инструмента тоже опубликовал ответ? ;) Теперь я сделал.
Дезсо
Я польщен! Он не очень много рассказал о своем собственном замечательном плагине.
Toing_toing
0

Существует инструмент с открытым исходным кодом, который предоставляет функции для преобразования базы данных MySQL в базу данных Postgresql, включая индексы, fks и данные.

https://github.com/ggarri/mysql2psql

Этот инструмент также позволяет определять изменения схемы, чтобы вы могли выполнить некоторые обновления вашей текущей схемы во время выполнения.

Габриэль Гарридо
источник