Come convertire mysql in postgresql? [chiuso]


14

Sto cercando disperatamente uno strumento di conversione per convertire un grande database mysql in postgresql. Ho bisogno che lo strumento / script sia:

  • Gratuito
  • Funziona su Linux
  • Semplice da usare e non buggy
  • Hai effettivamente provato e confermato che funziona
  • Preferibilmente, non scritto con Java o Ruby

Ho provato diversi strumenti elencati qui , ma nessuno ha funzionato per me.

Grazie in anticipo.


Non sono un esperto di PostgreSQL, sto ancora imparando me stesso. Ho rimosso la mia risposta. Tuttavia, c'è un'altra domanda sull'uso di mysqldump con postgresql pubblicata da qualcun altro: dba.stackexchange.com/q/9792/877 . Spero che sia d'aiuto !!!
RolandoMySQLDBA

1
Cosa c'è di sbagliato con gli strumenti scritti in Java? E potrebbe essere utile se descrivi cosa non funzionava esattamente con tutti loro.
a_horse_with_no_name

Risposte:


7

La migrazione tra due DBMS molto diversi richiede molto più della semplice migrazione dei dati. Ma la migrazione dei dati è di solito la parte più semplice.

Il modo in cui ho provato, che è gratuito e posso confermare che funziona:

  • crea un dump dello schema mysql
  • Regola l'SQL usando un editor di testo e molta ricerca e sostituzione
  • eseguire l'SQL convertito in Postgres
  • Crea un dump in testo semplice da MySQL (ad es. CSV o qualche altro formato delimitato)
  • importare i dati usando il comando COPY di PostgreSQL

L'importazione dei dati potrebbe effettivamente essere difficile se ti affidi al comportamento di MySQL per accettare dati illegali (come il 31 febbraio)

La mia ipotesi è che questo sarà più veloce della ricerca di uno strumento, valutandone un sacco e poi cercando di capire quello che hai scelto. Ma dipende da quale tipo di "grande" ti riferisci. Se grande è diverse centinaia di tavoli, questo potrebbe non essere fattibile. Se grande si riferiva solo al numero di righe, questo è probabilmente il modo più veloce per farlo.

Esistono alcuni strumenti che possono scaricare uno schema di database in un formato DBMS indipendente (XML), come Liquibase , SchemaSpy o WbSchemaReport . Con Liquibase è probabilmente il più facile da usare. Gli altri richiederanno un po 'di lavoro manuale per scrivere / estendere l'XSLT per trasformare l'XML generato.

Se si utilizzano trigger e procedure memorizzate in MySQL, non credo che ci sarà alcuno strumento automatizzato in grado di tradurli senza richiedere un importante ripristino manuale in seguito - e quindi le procedure generate probabilmente non utilizzerebbero alcuna funzionalità avanzata del DBMS di destinazione .


6

Ho dovuto farlo di recente e dal momento che ci sarebbe voluto troppo tempo per cercare uno strumento ed essere in grado di fare cose con esso, l'ho fatto per mano con Vim e sostituzione-foo

  • sostituire INT NOT NULL AUTO_INCREMENT(o qualcosa del genere) conSERIAL
  • modificare everythig stringa correlati in un TEXT(nessuna differenza di velocità nell'uso TEXT, VARCHARo simili)
  • sbarazzarsi di quei fottuti backtick `
  • nessun motore di archiviazione in Postgres, quindi rimuovi ENGINE InnoDB(o qualsiasi altra cosa)
  • rimuovere UNSIGNED
  • ogni campo BLOB è BYTEA
  • le stringhe usano virgolette singole 'e nient'altro
  • fai attenzione se usi la concatenazione di stringhe da qualche parte, a partire dalla 9.1, il supporto di Postgres CONCATcome fallback per la concatenazione di stringhe non standard, prima della 9.1 è stato fatto usando 'string' || ' string'
  • riscrivere qualsiasi codice procedurale ...
  • prendersi cura dei nomi riservati (ad es. tabella, nome, ...) e dei nomi in maiuscolo. Devono essere citati due volte"
  • L'indicizzazione dovrebbe essere praticamente la stessa poiché la sintassi non varia
  • Per tutto ciò che ho dimenticato, dai un'occhiata ai wiki su questo argomento

Ognuno di questi proiettili dovrebbe essere fatto con una singola sostituzione.

Ho esportato lo schema e i dati separatamente . Assicurati di usare INSERTs invece di COPY. Se non sono in corso attività di fance, i dati dovrebbero richiedere (quasi) nessuna pulizia. Assicurati che tutto sia acceso UTF-8. Con 2 file separati, lo schema diventa più gestibile e non hai un file da 1 GB da modificare.

Quando si carica lo schema, si ottengono informazioni piuttosto dettagliate su dove si trova un errore, quindi il debug dovrebbe essere piuttosto semplice.


Ciao, come convertire i dati di campo BLOB di MySQL in BYTEA di PostgreSQL? Ho scoperto che se scarico i dati di Mysql come insert sql, non riesco a caricare i dati in PostgreSQL.
franchi

1

Lo sto lanciando là fuori, non l'ho mai provato, ma Tungesten Replicator potrebbe fare quello che vuoi. È principalmente uno strumento di replica, ma penso che potrebbe avere un processo di bootstrap che può aiutarti almeno con il pezzo di dati.

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.