Nasıl MySQL veritabanı PostgreSQL dönüştürmek için?


20

MySQL veritabanını PostgreSQL'e dönüştürmek için herhangi bir komut satırı aracı var mı? Ayrıca normal mysqldumpkomutu kullanarak veritabanını dönüştürmek için bir yol olup olmadığını bilmek istiyorum .



4
Bunu her gördüğümde sevinç gözyaşları ağlıyorum.
rfusca


Bu, bu sitenin tamamındaki en yararlı sorulardan biri.
Evan Carroll

Yanıtlar:


13

denedin mi:

mysqldump --compatible=postgresql dbname > export.sql

sonra tırnak kaçmak için bunu yapın

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

biraz daha masaj gerekebilir bu yüzden mysqldump doco daha yakından bakmak.


2
Zaten sizin tarafınızdan verilen yöntemi denedim ama postgresql
Mughil

2
@Mughil hata nedir?
Janus Troelsen

4
5 yıl ve mysqldumphenüz kimse sabit değil . syntax error at or near "(" LINE 2: "id" int(10) NOT NULL,
Cees Timmerman

1
Dev.mysql.com/doc/refman/8.0/en/… 'a göre izin verilen tek değer --compatibleşudur:ansi
phunehehe

7

İşte size yardımcı olabilecek birkaç açık kaynak araç:

FromMySqlToPostgreSql bir özellik erişim aracı ve kullanımı çok kolay.
Veri türlerini eşler, kısıtlamaları, dizinleri, PK'ları ve FK'leri tam olarak MySQL db'nizdeki gibi taşır.
Kaputun altında PostgreSQL COPY kullanıyor, bu nedenle veri aktarımı çok hızlı.
PHP'de yazılmış FromMySqlToPostgreSql (> = 5,4).

pgloader   , COPY komutunu kullanarak PostgreSQL için bir veri yükleme aracıdır. Sadece kullanmaya göre ana avantajı

COPY
veya
\copy
ve bir Yabancı Veri Sarıcısı kullanarak, pgloader'ın reddedilen verilerin ayrı bir dosyasını saklayacağı, ancak veritabanınıza iyi verileri kopyalamaya çalıştığı işlem davranışıdır. Varsayılan PostgreSQL davranışı işlemseldir, yani giriş verilerindeki (dosya veya uzak veritabanı) hatalı satır tablo için toplu yükün tamamını durduracaktır. pgloader ayrıca MySQL tarih damgalarının 0000-00-00 ve 0000-00-00 00:00:00 PostgreSQL'e dönüştürülmesinin tipik bir örneği olan veri yeniden biçimlendirmesini uygular
NULL
(takvimimizde hiç bir yıl sıfır olmadı).
pgloader LISP ile yazılmış ve kaynak kodu olarak dağıtılmıştır, bu yüzden kullanmadan önce derlemeniz gerekir.

Umarım sana yardımcı olur ...


1
pgloader, postgre dokümanlarında bile taşıma aracı olarak önerilir, bu yüzden en iyi seçim olduğunu söyleyebilirim. Ben 50 + tabloları ile oldukça küçük bir DB üzerinde başarı ile kullandım, bir cazibe gibi çalıştı.
Capaj

3

Aslında, EnterpriseDB tarafından geliştirilen, kullanımı oldukça kolay olan ücretsiz bir taşıma aracı var. StackBuilder: Migration Toolkit aracılığıyla kurulabilir


3

Son zamanlarda bir erişim veritabanı postgres dönüştürmek için DBConvert ücretsiz olmayan bir araç kullanın ve iyi güvenilir bir şekilde ücretsiz olarak yapmaya çalışırken boşa zaman miktarına göre para değerinde bulundu. Kullanmadığım MySQL <-> postgres için benzer bir araç satmak , ancak sadece komut satırı araçlarıyla ilgilenmediğiniz sürece dikkate değer olabilir.

Merak ediyorsanız ben onlara hiçbir şekilde bağlı değilim :-)


3

Örneğin, EnterpriseDB Geçiş Sihirbazı'nı kullanabilirsiniz.

OracleDB'yi sempatik olarak taşıyabilir. Ancak Mysql için bazı sınırlamaları vardır, örneğin, görünümleri, tetikleyicileri, saklı prosedürleri desteklemez.

Daha fazla bilgi için bkz. EDB Geçiş Araç Seti . Emin değilim, ancak saklı yordamlarınızı (varsa) kaydederek mysql-> oracle-> postgresql göç etmek mümkün olabilir.

Grep this: Veritabanı ve SQL Geçiş Araçları


1

Bu, sadece bu çözümü bulmama yardımcı olan mevcut cevaplara eklemek içindir. FromMySqlToPostgreSql kullandım . Tek yapmanız gereken FromMySqlToPostgreSql dosyasını indirip ayıklamak , örnek yapılandırma dosyasının bir kopyasını oluşturmak, içindeki db bağlantı değerlerini ayarlamak ve dizin dosyasını aşağıdaki komutla çalıştırmaktır:

php index.php config.xml

Basit ama etkili!


Yayınınızı bu araca bir bağlantıyla düzenleyebilir misiniz, lütfen?
dezso

Üzgünüm, bunu unuttum. Katma!
toing_toing

Ah, bu komik. Aracın yazarının da bir cevap gönderdiğini fark ettiniz mi? ;) Şimdi yaptım.
dezso

Koltuklarım kabardı! Yine de kendi harika eklentisi hakkında çok fazla açıklama yapmadı.
toing_toing

0

MySQL db'yi Postgresql db'ye, indeksler, fks ve veriye dönüştürmek için işlevsellik sağlayan bir açık kaynak aracı vardır.

https://github.com/ggarri/mysql2psql

Bu araç aynı zamanda şema değişikliklerini tanımlamanıza izin verir, böylece mevcut şemanızda çalışma zamanında bazı yükseltmeler yapabilirsiniz.

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.