Alat untuk bermigrasi dari SQLite ke PostgreSQL

11

Saya perlu terus bermigrasi dari SQLite ke PostgreSQL. Secara terus-menerus, maksud saya bahwa saya akan mengimpor kembali database SQLite ke dalam PostgreSQL setiap hari. Akan lebih baik jika saya bisa membuat perubahan pada tabel dalam SQLite sesuka saya tanpa harus secara manual membuat perubahan pada database PostgreSQL. Saya akan menjalankan migrasi dari Python, tetapi itu bisa berupa alat eksternal, yang dapat dikontrol dari baris perintah. Alat tersebut harus tersedia untuk Linux, dan alangkah baiknya jika juga dijalankan pada Windows.

David
sumber
1
Hanya untuk memperjelas, apakah Anda perlu memigrasikan data dan skema?
h0tw1r3
1
Sudah diperiksa di wiki PG ?
Denis de Bernardy
Bisakah Anda menguraikan mengapa Anda perlu melakukan ini? Mungkin ada cara yang lebih baik untuk mendekati masalah root Anda daripada mengatasi dan mengonversi basis data. Sebagai contoh, CleanFill menyarankan pengembangan ETL.
Nick Chammas
@Nick Saya minta maaf, tetapi ini adalah kasus yang sangat khusus, yang akan terlalu banyak menjelaskan / diskusi untuk dijelaskan.
David
@ David - Jika Anda menginginkan lebih banyak jawaban, mungkin membantu meringkas kasus penggunaan Anda dalam paragraf lain sebaik mungkin tanpa terlalu banyak menjelaskan / berdiskusi. Saat berdiri Anda meminta kami untuk melakukan terlalu banyak menebak. Tautan ke situs SE lain selalu membantu jika mereka membantu kami memahami dari mana Anda berasal.
Jack bilang coba topanswers.xyz

Jawaban:

3

Saya menggunakan Navicat untuk melakukan migrasi antar database (terutama MSSQL / MySQL). Itu berjalan di Linux dan Windows, tetapi terutama alat GUI. Jika Anda membuat profil, itu bisa dimulai dari baris perintah. Anda dapat mengunduh uji coba 30 hari.

pritaea
sumber
Terima kasih atas tipnya. Bisakah itu menjalankan seluruh proses migrasi menggunakan input baris perintah tunggal?
David
1
Saya sarankan Anda mengajukan pertanyaan ini ke dukungan Navicat. Mereka sangat membantu (IMO). Menurut situs web itu harus berfungsi, tetapi saya tidak pernah perlu menguji / menggunakan ini.
pritaeas
4

Apakah Anda sudah melihat menggunakan alat ETL? Mereka eksternal dan saya percaya pentaho berjalan di kedua windows dan linux dan gratis. situs pentaho

Bersihkan Isi
sumber
Hai, dan selamat datang di situs ini! Saya tahu tentang Pentaho, tapi saya tidak tahu itu bisa menyelesaikan ini. Bisakah ia menyelesaikannya?
David
1
Saya juga memikirkan ETL saat membaca pertanyaan tetapi saya pikir overhead dan kurva belajar agak tinggi. Selain itu, saya tidak berpikir akan mudah melakukan migrasi "terus menerus".
DrColossos
Terima kasih! Saya pribadi lebih berpengalaman dengan SSIS, tetapi itu datang dengan SQL Server dan Anda harus membayar untuk lisensi SQL. Pentaho adalah alat ETL dan mampu memigrasikan data dari sumber ke tujuan. Anda akan memerlukan driver yang tepat untuk berkomunikasi dengan sumber / tujuan. Ada sedikit kurva belajar dengan salah satu alat ETL, tapi itu alat lain di kotak alat Anda, eh? Akan ada beberapa langkah 1 untuk memigrasi data, yang lain untuk memigrasi perubahan DDL. Saya akan mulai dengan 1 - hanya memindahkan data (langkah lebih mudah), setelah Anda turun, Anda akan lebih nyaman untuk melanjutkan.
CleanFill
Dari suara ini, saya tidak yakin bahwa menggunakan Pentaho akan lebih cepat daripada menulis ini dari awal di Jawa atau Python, mengingat kurva pembelajaran dan kompleksitas menggunakan alat ETL baru.
David
@ David - mempelajari alat ETL baru kemungkinan akan jauh lebih mudah daripada menciptakan kembali roda IMO
Jack mengatakan coba topanswers.xyz
2

Saya pikir itu mungkin, tetapi saya tidak berpikir banyak orang akan senang dengan itu. Dalam kasus umum, PosgreSQL dan SQLite memperlakukan definisi tabel dengan sangat berbeda.

CREATE TABLE test (trans_date date primary key);

Jika saya membuang isi tabel itu dari SQLite, inilah yang saya dapatkan.

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;

Saya pikir setiap kolom harus VARCHAR () di sisi PostgreSQL. Mungkin tidak terlalu sulit untuk menulis skrip untuk mengubah semua tipe data SQLite menjadi VARCHAR (). Tapi rasanya sangat mengerikan seperti menendang paus mati di pantai.

Mike Sherrill 'Cat Recall'
sumber
Mengonversi semua kolom ke VARCHAR tidak akan cukup baik. Seharusnya ada alat untuk ini atau cara yang tepat untuk melakukannya.
David
Pada tabel contoh di atas, Anda bisa membuat tabel dengan kolom tanggal di PostgreSQL, tetapi Anda tidak bisa mengimpor kedua baris ke dalamnya. Jadi, dalam kasus umum, saya tidak memikirkan apa pun kecuali VARCHAR (n) mungkin bisa bekerja.
Mike Sherrill 'Cat Recall'
Mengapa Anda mendapatkan "Oh, bugger." nilai dari SQLite?
David
2
@ David: Karena SQLite memungkinkan Anda menyimpan "Oh, bugger" di kolom ketik "date". SQLite memungkinkan Anda menyimpan apa saja di hampir semua kolom. Itulah salah satu masalah utama dalam migrasi SQLite ke dbms yang mendekati standar SQL.
Mike Sherrill 'Cat Recall'
1

Kamu bisa menggunakan

Perangkat Migrasi Data ESF .

Saya telah mencobanya, ia bekerja dengan baik, dan memberi Anda opsi untuk konversi dari berbagai jenis basis data ke banyak jenis basis data: seperti sqlite, mysql, mssql, oracle, postgresql, dan banyak lagi!

Anda juga baru saja melihat versi uji coba / evaluasinya, hasilnya benar-benar memuaskan!

sangat mudah
sumber