Jak przekonwertować mysql na postgresql? [Zamknięte]

14

Desperacko szukam narzędzia do konwersji do konwersji dużej bazy danych mysql do postgresql. Potrzebuję narzędzia / skryptu, aby:

  • Darmowy
  • Działa pod Linuksem
  • Prosty w użyciu i nie ma błędów
  • Próbowałeś i potwierdziłeś, że działa
  • Najlepiej nie napisane w Javie lub Ruby

Próbowałem różnych narzędzi wymienionych tutaj , ale żadne nie działało dla mnie.

Z góry dziękuję.

hbp
źródło
Nie jestem ekspertem PostgreSQL, wciąż się uczę. Usunąłem swoją odpowiedź. Istnieje jednak inne pytanie dotyczące używania mysqldump z postgresql opublikowanym przez kogoś innego: dba.stackexchange.com/q/9792/877 . Mam nadzieję, że to pomoże !!!
RolandoMySQLDBA
1
Co jest złego w narzędziach napisanych w Javie? I może to pomóc, jeśli opisałeś, co dokładnie „ nie działało ” z nimi wszystkimi.
a_horse_w_no_name

Odpowiedzi:

7

Migracja między dwoma bardzo różnymi DBMS wymaga znacznie więcej niż tylko migracji danych. Ale migracja danych jest zwykle najłatwiejsza.

Sposób, który wypróbowałem, który jest bezpłatny i mogę potwierdzić, że działa:

  • utwórz zrzut tylko schematu mysql
  • Dostosuj SQL za pomocą edytora tekstu i wielu wyszukiwań i zamień
  • uruchom przekonwertowany SQL w Postgres
  • Utwórz zrzut zwykłego tekstu z MySQL (np. CSV lub inny format rozdzielany)
  • zaimportuj dane za pomocą polecenia COPY PostgreSQL

Import danych może być trudny, jeśli polegasz na zachowaniu MySQL w celu zaakceptowania nielegalnych danych (np. 31 lutego)

Domyślam się, że będzie to szybsze niż szukanie narzędzia, ocenianie kilku z nich, a następnie próba zrozumienia tego, który wybrałeś. Ale to zależy od tego, do jakiego „dużego” masz na myśli. Jeśli duże jest kilkaset tabel, może to nie być możliwe. Jeśli duży odnosi się tylko do liczby wierszy, to prawdopodobnie jest to najszybszy sposób na zrobienie tego.

Istnieje kilka narzędzi, które mogą zrzucić schemat bazy danych w formacie niezależnym od DBMS (XML), takich jak Liquibase , SchemaSpy lub WbSchemaReport . Liquibase jest prawdopodobnie najłatwiejszym w użyciu. Inne będą wymagały ręcznej pracy przy pisaniu / rozszerzaniu XSLT w celu przekształcenia wygenerowanego XML.

Jeśli używasz wyzwalaczy i procedur przechowywanych w MySQL, nie sądzę, aby istniało jakieś zautomatyzowane narzędzie, które może je przetłumaczyć bez konieczności późniejszego poważnego ręcznego ustawiania - a wtedy wygenerowane procedury prawdopodobnie nie wykorzystałyby żadnych zaawansowanych funkcji docelowego DBMS .

koń bez imienia
źródło
6

Musiałem to zrobić niedawno, a ponieważ znalezienie narzędzia i zrobienie z nim rzeczy zajęłoby zbyt wiele czasu, zrobiłem to osobno z vimem i substytucją-foo

  • zamień INT NOT NULL AUTO_INCREMENT(lub coś takiego) naSERIAL
  • zmienić everythig ciąg związany w TEXT(nie ma różnicy prędkości w użyciu TEXT, VARCHARlub podobny)
  • pozbyć się tych cholernych backticków
  • brak silników pamięci masowej w Postgres, więc usuń ENGINE InnoDB(lub cokolwiek)
  • usunąć UNSIGNED
  • każde pole BLOB jest BYTEA
  • ciągi używają pojedynczych cudzysłowów 'i nic więcej
  • bądź ostrożny, jeśli gdzieś używasz konkatenacji łańcuchów, począwszy od wersji 9.1, wsparcie Postgres CONCATjako rezerwy niestandardowej konkatenacji łańcuchów, przed wersją 9.1 zostało to zrobione przy użyciu 'string' || ' string'
  • przepisz kod proceduralny ...
  • dbaj o nazwy, które są zastrzeżone (np. tabela, nazwa, ...), a także nazwy wielkich liter. Muszą być podwójnie cytowane"
  • Indeksowane powinny być prawie takie same, ponieważ składnia się nie zmienia
  • Po wszystko, o czym zapomniałem, zajrzyj do wikibooków na ten temat

Każdy z tych pocisków powinien być wykonany z pojedynczą zamianą.

Schemat i dane wyeksportowałem osobno . Upewnij się, że używasz INSERTs zamiast COPY. Jeśli nie toczą się żadne fance, dane powinny wymagać (prawie) czyszczenia. Upewnij się, że wszystko jest włączone UTF-8. Dzięki 2 oddzielnym plikom schemat staje się łatwiejszy do zarządzania i nie masz pliku 1 GB do edycji.

Podczas ładowania schematu otrzymujesz dość szczegółowe informacje o miejscu wystąpienia błędu, więc debugowanie powinno być dość proste.

DrColossos
źródło
Cześć, jak przekonwertować dane pola BLOB MySQL na BYTEA PostgreSQL? Odkryłem, że jeśli zrzucę dane Mysql jako insert sql, nie mogę załadować danych w PostgreSQL.
franków
1

Rzucam to tam, nigdy tego nie próbowałem, ale Tungesten Replicator może robić, co chcesz. Jest to przede wszystkim narzędzie do replikacji, ale myślę, że może mieć proces ładowania początkowego, który może ci pomóc przynajmniej z fragmentem danych.

Aaron Brown
źródło