SQLite'dan PostgreSQL'e geçiş araçları


11

Sürekli SQLite PostgreSQL geçiş gerekir. Sürekli olarak, SQLite veritabanını her gün PostgreSQL'e yeniden aktaracağımı kastediyorum. PostgreSQL veritabanında herhangi bir değişiklik yapmak zorunda kalmadan SQLite tablolarında değişiklik yapabilsem iyi olur. Geçişi Python'dan çalıştıracağım, ancak komut satırından kontrol edilebilecek herhangi bir harici araç olabilir. Aracın Linux için mevcut olması gerekiyor ve Windows'ta da çalıştırılması iyi olurdu.


1
Sadece açıklığa kavuşturmak için, hem verileri hem de şemayı taşımanız mı gerekiyor?
h0tw1r3

1
İçinde üzerinde İşaretli PG wiki ?
Denis de Bernardy

Bunu neden yapmanız gerektiğinden bahsedebilir misiniz? Belki de kök probleminize yaklaşmanın, veritabanını ele alıp dönüştürmekten daha iyi yolları vardır. Örneğin, CleanFill bir ETL geliştirilmesini önerdi.
Nick Chammas

@ Üzgünüm, ama tarif etmek için çok fazla açıklama / tartışma gerektiren çok özel bir durum.
David

@David - Daha fazla yanıt istiyorsanız, çok fazla açıklama yapmadan / tartışmadan, kullanım durumunuzu başka bir paragrafta en iyi şekilde özetlemek gerçekten yardımcı olabilir. Durduğu için sizden çok fazla tahminde bulunmamızı istiyorsunuz. Bağlantılar onlar nereden geldiğini anlamamıza yardımcı eğer diğer SE sitelere her zaman faydalıdır.
Jack diyor ki topanswers.xyz

Yanıtlar:


3

Veritabanları arasında geçiş yapmak için Navicat kullanıyorum (öncelikle MSSQL / MySQL). Linux ve Windows üzerinde çalışır, ancak öncelikle bir GUI aracıdır. Bir profil oluşturursanız, profil komut satırından başlatılabilir. 30 günlük deneme sürümünü indirebilirsiniz.


Bahşiş için teşekkür ederim. Tüm taşıma işlemini tek bir komut satırı girişi kullanarak çalıştırabilir mi?
David

1
Bu soruyu Navicat desteğine sormanızı öneririm. Onlar çok yararlı (IMO). Web sitesine göre çalışması gerekir, ama bunu test etmek / kullanmak için hiçbir zaman ihtiyacım olmadı.
pritaeas

4

ETL araçlarını kullanmayı düşündünüz mü? Onlar harici ve pentaho hem windows hem de linux ve onun özgür çalışır inanıyorum. pentaho sitesi


Merhaba, siteye hoş geldiniz! Pentaho'yu biliyorum, ama bunun çözebileceğini bilmiyordum. Düşünebilir mi çözebilir?
David

1
Soruyu okurken ETL'yi de düşünüyordum, ancak ek yük ve öğrenme eğrisinin oldukça yüksek olduğunu düşünüyorum. Dahası, göçü “sürekli” yapmanın kolay olacağını düşünmüyorum.
DrColossos

Teşekkürler! Şahsen SSIS ile daha deneyimliyim, ancak bu SQL Server ile birlikte geliyor ve SQL lisansı için ödeme yapmanız gerekiyor. Pentaho bir ETL aracıdır ve verileri kaynaktan hedefe taşıyabilir. Kaynak / hedef ile iletişim kurmak için doğru sürücülere ihtiyacınız olacaktır. ETL araçlarından herhangi birinde bir öğrenme eğrisi var, ancak bu araç kutunuzdaki başka bir araç, ha? Verileri taşımak için birkaç adım, DDL değişikliklerini taşımak için başka bir adım olacaktır. 1 ile başlayacağım - sadece verileri taşıyın (daha kolay adım), bir kez indirdiğinizde, devam etmek için daha rahat olacaksınız.
CleanFill

Bunun sesinden, Pentaho kullanmanın, yeni bir ETL aracı kullanmanın öğrenme eğrisi ve karmaşıklığı göz önüne alındığında, bunu Java veya Python'da sıfırdan yazmaktan daha hızlı olacağından emin değilim.
David

@David - yeni bir ETL aracı öğrenmek muhtemelen IMO tekerleğini icat etmekten çok daha kolay olacak
Jack diyor ki topanswers.xyz

2

Bence bu mümkün, ama pek çok insanın bundan memnun olacağını sanmıyorum. Genel durumda, PosgreSQL ve SQLite tablo tanımlarını çok farklı ele alır.

CREATE TABLE test (trans_date date primary key);

Bu tablonun içeriğini SQLite'den dökersem, burada ne elde edeceğim.

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;

Her sütun PostgreSQL tarafında VARCHAR () olması gerektiğini düşünüyorum. Tüm SQLite veri türlerini VARCHAR () olarak değiştirmek için bir komut dosyası yazmak çok zor olmayabilir. Ama sahilde ölü balinaları tekmelemek gibi çok kötü hissediyor.


Tüm sütunları VARCHAR'a dönüştürmek yeterli olmaz. Bunun için bir araç veya bunu yapmanın uygun bir yolu olmalı.
David

Yukarıdaki örnek tabloda, PostgreSQL'de tarih sütununa sahip bir tablo oluşturabilirsiniz, ancak her iki satırı da içeri aktaramazsınız. Yani, genel durumda, VARCHAR (n) muhtemelen işe yarayabilecek bir şey düşünmüyorum.
Mike Sherrill 'Cat Recall'

Neden "Oh, bugger" ı alıyorsun. SQLite değeri?
David

2
@David: Çünkü SQLite "Oh", "date" türündeki bir sütunda saklamanızı sağlar. SQLite hemen hemen her şeyi herhangi bir sütunda saklamanızı sağlar. Bu SQLite SQL standartlarına yaklaşan herhangi bir dbms geçirme ana sorunlarından biridir.
Mike Sherrill 'Cat Recall'

1

Kullanabilirsiniz

ESF Veri Taşıma Araç Seti .

Denedim, iyi çalışıyor ve birden çok veritabanı türünden birden çok veritabanı türüne dönüştürme seçenekleri sunar: sqlite, mysql, mssql, oracle, postgresql ve sadece çok sayıda!

Ayrıca sadece deneme / değerlendirme sürümüne bir göz atın, sonuçlar gerçekten tatmin edici!


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.