Come convertire un database MySQL in PostgreSQL?


20

Esiste uno strumento da riga di comando per convertire il database MySQL in PostgreSQL? Vorrei anche sapere se esiste un modo per convertire il database usando il normale mysqldumpcomando.



4
Ogni volta che vedo questo, piango lacrime di gioia.
rfusca,


Questa è facilmente una delle domande più utili su questo intero sito.
Evan Carroll

Risposte:


13

hai provato:

mysqldump --compatible=postgresql dbname > export.sql

quindi fai questo per sfuggire alle virgolette

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

potrebbe essere necessario un po 'più di massaggio, quindi guarda più da vicino il doco mysqldump.


2
Ho già provato il metodo fornito da te, ma si sta verificando un errore durante il ripristino nel postgresql
Mughil

2
@Mughil qual è l'errore?
Janus Troelsen,

4
5 anni e nessuno è stato mysqldumpancora risolto . syntax error at or near "(" LINE 2: "id" int(10) NOT NULL,
Cees Timmerman,

1
Secondo dev.mysql.com/doc/refman/8.0/en/… l'unico valore consentito per --compatibleèansi
phunehehe

7

Ecco alcuni strumenti open source che possono essere molto utili:

FromMySqlToPostgreSql è uno strumento per raggiungere funzionalità e molto facile da usare.
Mappa i tipi di dati, migra vincoli, indici, PK e FK esattamente come erano nel tuo db MySQL.
Sotto il cofano utilizza PostgreSQL COPY, quindi il trasferimento dei dati è molto veloce.
FromMySqlToPostgreSql scritto in PHP (> = 5.4).

pgloader   è uno strumento di caricamento dei dati per PostgreSQL, usando il comando COPY. Il suo principale vantaggio rispetto al solo utilizzo

COPY
o
\copy
e oltre a utilizzare un Data Wrapper esterno, è il suo comportamento di transazione, in cui pgloader manterrà un file separato di dati rifiutati, ma continuerà a provare a copiare buoni dati nel database. Il comportamento predefinito di PostgreSQL è transazionale, il che significa che qualsiasi riga errata nei dati di input (file o database remoto) interromperà l'intero carico di massa per la tabella. pgloader implementa anche la riformattazione dei dati, un tipico esempio di quella che è la trasformazione dell'aggiornamento e dell'aggiornamento dei datestamp MySQL da 00:00:00 a PostgreSQL
NULL
valore (perché il nostro calendario non ha mai avuto un anno zero).
pgloader scritto in LISP e distribuito come codice sorgente, quindi è necessario compilarlo prima dell'uso.

Spero che ti possa aiutare ...


1
pgloader è persino uno strumento di migrazione consigliato sui documenti postgre, quindi direi che è la scelta migliore. L'ho usato con successo su un DB abbastanza piccolo con oltre 50 tabelle, ha funzionato come un fascino.
Capaj,

3

In realtà esiste uno strumento di migrazione gratuito che è abbastanza facile da usare, sviluppato dagli stessi EnterpriseDB. Può essere installato tramite StackBuilder: Migration Toolkit


3

Recentemente uso uno strumento non gratuito di DBConvert per convertire un database di accesso in postgres e ho trovato che vale la pena spendere i soldi rispetto alla quantità di tempo che ho perso cercando di farlo in modo affidabile gratuitamente. Vendono uno strumento simile per MySQL <-> postgres , che non ho usato, ma potrebbe valere la pena considerare a meno che non siate interessati solo agli strumenti da riga di comando.

Nel caso ti stia chiedendo che non sono affiliato con loro in alcun modo :-)


3

Ad esempio, è possibile utilizzare la Migrazione guidata di EnterpriseDB.

Può migrare simpaticamente OracleDB. Ma per Mysql, ha alcune limitazioni, ad esempio, non supporta visualizzazioni, trigger, stored procedure.

Per ulteriori informazioni, consultare EDB Migration Toolkit . Non sono sicuro, ma può essere possibile migrare mysql-> oracle-> postgresql salvando le procedure memorizzate (nel caso esistano).

Grep this: Database e SQL Migration Tools


1

Questo è solo per aggiungere alle risposte esistenti, che mi ha aiutato a trovare questa soluzione. Ho usato FromMySqlToPostgreSql . Tutto quello che devi fare è scaricare ed estrarre FromMySqlToPostgreSql , creare una copia del file di configurazione di esempio, impostare i valori di connessione db al suo interno ed eseguire il file di indice con il comando seguente:

php index.php config.xml

Semplice ma efficace!


Potresti modificare il tuo post con un link a questo strumento, per favore?
dezso,

Scusa, l'ho dimenticato. Aggiunto!
toing_toing il

Ah, questo è divertente. Ti sei reso conto che anche l'autore dello strumento ha pubblicato una risposta? ;) Ora l'ho fatto.
dezso,

Sono lusingato! Tuttavia, non ha descritto molto del suo meraviglioso plugin.
toing_toing il

0

Esiste uno strumento opensource che fornisce funzionalità per convertire un db MySQL in db Postgresql inclusi indici, fks e dati.

https://github.com/ggarri/mysql2psql

Questo strumento consente anche di definire le modifiche dello schema in modo da poter eseguire alcuni aggiornamenti allo schema corrente in fase di esecuzione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.