Narzędzia do migracji z SQLite do PostgreSQL

11

Muszę stale migrować z SQLite do PostgreSQL. Przez ciągłe rozumiem, że codziennie będę ponownie importować bazę danych SQLite do PostgreSQL. Byłoby miło, gdybym mógł wprowadzić zmiany w tabelach w SQLite, jak mi się podoba, bez konieczności ręcznego wprowadzania zmian w bazie danych PostgreSQL. Uruchomię migrację z Pythona, ale może to być dowolne narzędzie zewnętrzne, którym można sterować z wiersza poleceń. Narzędzie musi być dostępne dla systemu Linux i byłoby miło, gdyby działało również w systemie Windows.

David
źródło
1
Aby wyjaśnić, czy potrzebujesz przeprowadzić migrację zarówno danych, jak i schematu?
h0tw1r3
1
Zameldowałeś się na stronie wiki PG ?
Denis de Bernardy
Czy mógłbyś wyjaśnić, dlaczego musisz to zrobić? Być może istnieją lepsze sposoby podejścia do problemu roota niż kopiowanie i konwertowanie bazy danych. Na przykład CleanFill zasugerował opracowanie ETL.
Nick Chammas
@Nick Przykro mi, ale jest to bardzo szczególny przypadek, którego opisanie wymagałoby zbyt wielu wyjaśnień / dyskusji.
David,
@David - Jeśli chcesz uzyskać więcej odpowiedzi, może pomóc podsumowanie przypadku użycia w innym akapicie, najlepiej jak potrafisz, bez zbytniego wyjaśniania / dyskusji. W tej chwili prosisz nas o zbyt wiele zgadywania. Linki do innych stron SE są zawsze pomocne, jeśli pomagają nam zrozumieć, skąd pochodzisz.
Jack mówi, że spróbuj topanswers.xyz

Odpowiedzi:

3

Korzystam z Navicat do migracji między bazami danych (przede wszystkim MSSQL / MySQL). Działa w systemach Linux i Windows, ale jest przede wszystkim narzędziem graficznym. Jeśli utworzysz profil, można go uruchomić z wiersza polecenia. Możesz pobrać 30-dniową wersję próbną.

pritaeas
źródło
Dziękuję za wskazówkę. Czy można uruchomić cały proces migracji przy użyciu jednego wiersza poleceń?
David,
1
Sugeruję, aby zadać to pytanie działowi wsparcia Navicat. Są bardzo pomocni (IMO). Według strony internetowej powinno to działać, ale nigdy nie musiałem tego testować / używać.
pritaeas,
4

Czy zastanawiałeś się nad użyciem narzędzi ETL? Są zewnętrzne i wierzę, że pentaho działa zarówno na systemie Windows, jak i Linux i jest za darmo. strona pentaho

CleanFill
źródło
Cześć, witam na stronie! Wiem o Pentaho, ale nie wiedziałem, że może to rozwiązać. Czy to rozwiąże, jak myślisz?
David
1
Myślałem o ETL również podczas czytania pytania, ale myślę, że krzywa kosztów ogólnych i uczenia się jest dość wysoka. Ponadto nie sądzę, aby migracja była łatwa „w sposób ciągły”.
DrColossos,
Dzięki! Ja osobiście mam większe doświadczenie z SSIS, ale to pochodzi z SQL Server i musisz zapłacić za licencję SQL. Pentaho jest narzędziem ETL i może migrować dane ze źródła do miejsca docelowego. Będziesz potrzebował odpowiednich sterowników do komunikacji ze źródłem / miejscem docelowym. W przypadku każdego z narzędzi ETL jest trochę krzywej uczenia się, ale to kolejne narzędzie w twoim zestawie narzędzi, co? Będzie kilka kroków 1 do migracji danych, drugi do migracji zmian DDL. Zaczynam od 1 - po prostu przenieś dane (łatwiejszy krok), kiedy już to zrobisz, będziesz wygodniej kontynuować.
CleanFill
Z tego nie jestem pewien, że używanie Pentaho byłoby szybsze niż pisanie tego od zera w Javie lub Pythonie, biorąc pod uwagę krzywą uczenia się i złożoność korzystania z nowego narzędzia ETL.
David
@David - nauka nowego narzędzia ETL będzie prawdopodobnie znacznie łatwiejsza niż ponowne wynalezienie koła IMO
Jack mówi, spróbuj wypróbować topanswers.xyz
2

Myślę, że to możliwe, ale nie sądzę, aby wielu ludzi było z tego zadowolonych. W ogólnym przypadku PosgreSQL i SQLite traktują definicje tabel zupełnie inaczej.

CREATE TABLE test (trans_date date primary key);

Jeśli zrzucę zawartość tej tabeli z SQLite, oto co otrzymuję.

sqlite> .dump
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE test (trans_date date primary key);
INSERT INTO "test" VALUES('2011-01-01');
INSERT INTO "test" VALUES('Oh, bugger.');
COMMIT;

Myślę, że każda kolumna musiałaby być VARCHAR () po stronie PostgreSQL. Napisanie skryptu, aby zmienić wszystkie typy danych SQLite na VARCHAR (), może nie być trudne. Ale to strasznie przypomina kopanie martwych wielorybów na plaży.

Mike Sherrill „Cat Recall”
źródło
Konwersja wszystkich kolumn na VARCHAR nie byłaby wystarczająca. Powinno istnieć narzędzie do tego lub jakiś odpowiedni sposób, aby to zrobić.
David
W powyższej przykładowej tabeli możesz utworzyć tabelę z kolumną daty w PostgreSQL, ale nie możesz zaimportować do niej obu wierszy. Tak więc, w ogólnym przypadku, nie sądzę, by VARCHAR (n) mógł działać.
Mike Sherrill „Cat Recall”
Dlaczego dostajesz „Och, robale”. wartość z SQLite?
David
2
@David: Ponieważ SQLite pozwala przechowywać „Och, bugger” w kolumnie typu „data”. SQLite pozwala przechowywać prawie wszystko w dowolnej kolumnie. Jest to jeden z głównych problemów z migracją SQLite do dowolnej dbms zbliżonej do standardów SQL.
Mike Sherrill „Cat Recall”
1

Możesz użyć

Zestaw narzędzi do migracji danych EFS .

Próbowałem, działa dobrze i daje opcje konwersji z wielu typów baz danych do wielu typów baz danych: takich jak sqlite, mysql, mssql, oracle, postgresql i wiele innych!

Wystarczy spojrzeć na jego wersję próbną / ewaluacyjną, wyniki są naprawdę zadowalające!

linuxeasy
źródło