Jak przekonwertować bazę danych MySQL na PostgreSQL?

20

Czy jest jakieś narzędzie wiersza polecenia do konwersji bazy danych MySQL na PostgreSQL? Chciałbym również wiedzieć, czy istnieje sposób na konwersję bazy danych za pomocą zwykłego mysqldumppolecenia.

Mughil
źródło
1
Zacznij tutaj: wiki.postgresql.org/wiki/…
a_horse_with_no_name
4
Ilekroć to widzę, płaczę łzami radości.
rfusca
ora2pg.darold.net
a_horse_w_na_nazwa
Jest to z pewnością jedno z najbardziej przydatnych pytań na tej stronie.
Evan Carroll

Odpowiedzi:

13

czy próbowałeś:

mysqldump --compatible=postgresql dbname > export.sql

następnie zrób to, aby uniknąć cudzysłowów

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

może potrzebować więcej masowania, więc przyjrzyj się bliżej mysqldump doco.

Nick Kavadias
źródło
2
Próbowałem już podanej przez ciebie metody, ale daje błąd podczas przywracania w postgresql
Mughil
2
@Mughil jaki jest błąd?
Janus Troelsen
4
5 lat i nikt mysqldumpjeszcze tego nie naprawił . syntax error at or near "(" LINE 2: "id" int(10) NOT NULL,
Cees Timmerman
1
Według dev.mysql.com/doc/refman/8.0/en/… jedyną dozwoloną wartością --compatiblejestansi
phunehehe
7

Oto kilka narzędzi typu open source, które mogą być bardzo pomocne:

FromMySqlToPostgreSql to narzędzie o szerokim zakresie funkcji i bardzo łatwe w użyciu.
Mapuje typy danych, migruje ograniczenia, indeksy, PK i FK dokładnie tak, jak w bazie danych MySQL.
Pod maską wykorzystuje PostgreSQL COPY, więc transfer danych jest bardzo szybki.
FromMySqlToPostgreSql napisany w PHP (> = 5.4).

pgloader   to narzędzie do ładowania danych dla PostgreSQL, wykorzystujące polecenie COPY. Jego główna zaleta w porównaniu z samym użyciem

COPY
lub
\copy
, a także nad używaniem opakowania danych obcych, to zachowanie transakcji, w którym pgloader zachowa osobny plik odrzuconych danych, ale nadal będzie próbował kopiować dobre dane w bazie danych. Domyślne zachowanie PostgreSQL ma charakter transakcyjny, co oznacza, że ​​każda błędna linia w danych wejściowych (plik lub zdalna baza danych) zatrzyma całe masowe ładowanie tabeli. pgloader implementuje również formatowanie danych, typowym przykładem tego jest transformacja znaczników danych MySQL 0000-00-00 i 0000-00-00 00:00:00 do PostgreSQL
NULL
wartość (ponieważ nasz kalendarz nigdy nie miał zerowego roku).
pgloader napisany w LISP i dystrybuowany jako kod źródłowy, więc musisz go skompilować przed użyciem.

Mam nadzieję, że to ci pomoże ...

Anatolij
źródło
1
pgloader jest nawet zalecanym narzędziem do migracji dokumentów postgre, więc powiedziałbym, że to najlepszy wybór. Użyłem go z powodzeniem na dość małym DB z ponad 50 stołami, działało jak urok.
Capaj,
3

W rzeczywistości istnieje bezpłatne narzędzie do migracji, które jest dość łatwe w użyciu, opracowane przez samych EnterpriseDB. Można go zainstalować za pomocą StackBuilder: Migration Toolkit

uygar.raf
źródło
3

Ostatnio korzystam z niewolnego narzędzia DBConvert do konwersji bazy danych dostępu na postgres i stwierdziłem, że jest on wart swojej ceny w porównaniu do ilości czasu, który zmarnowałem, próbując zrobić to niezawodnie za darmo. Sprzedaj podobne narzędzie do MySQL <-> postgres , z którego nie korzystałem, ale może być warte rozważenia, chyba że interesują Cię tylko narzędzia wiersza poleceń.

Jeśli zastanawiasz się, nie jestem z nimi w żaden sposób związany :-)

Jack Douglas
źródło
3

Możesz na przykład użyć Kreatora migracji EnterpriseDB.

Może symulować migrację OracleDB. Ale w przypadku Mysql ma pewne ograniczenia, na przykład nie obsługuje widoków, wyzwalaczy, procedur przechowywanych.

Aby uzyskać więcej informacji, zobacz Zestaw narzędzi do migracji EDB . Nie jestem pewien, ale można przeprowadzić migrację mysql-> oracle-> postgresql, zapisując procedury składowane (jeśli takie istnieją).

Grep this: Narzędzia do migracji baz danych i SQL

shcherbak
źródło
1

Wystarczy dodać do istniejących odpowiedzi, które pomogły mi znaleźć to rozwiązanie. Użyłem FromMySqlToPostgreSql . Wszystko, co musisz zrobić, to pobrać i wyodrębnić FromMySqlToPostgreSql , zrobić kopię przykładowego pliku konfiguracyjnego, ustawić w nim wartości połączenia db i uruchomić plik indeksu za pomocą następującej komendy:

php index.php config.xml

Prosty, ale skuteczny!

toing_toing
źródło
Czy możesz edytować swój post za pomocą linku do tego narzędzia?
dezso
Przepraszam, zapomniałem o tym. Dodany!
toing_toing
Ach, to jest zabawne. Czy zdałeś sobie sprawę, że autor narzędzia również opublikował odpowiedź? ;) Teraz zrobiłem.
dezso,
Pochlebia mi! Jednak nie opisał wiele o swojej własnej cudownej wtyczce.
toing_toing
0

Istnieje narzędzie typu open source, które zapewnia funkcje konwersji bazy danych MySQL na bazę danych Postgresql, w tym indeksy, fks i dane.

https://github.com/ggarri/mysql2psql

To narzędzie pozwala również definiować zmiany schematu, dzięki czemu można wykonać kilka aktualizacji bieżącego schematu w czasie wykonywania.

Gabriel Garrido
źródło