Domanda

Ho provato gli strumenti elencati Qui, alcuni con più successo di altri, ma nessuno mi ha fornito una sintassi postgres valida che potessi usare (errori minuscoli ecc.)

È stato utile?

Soluzione

C'è un mysqldump opzione che rende l'output del codice PostgreSQL:

mysqldump --compatible=postgresql ...

Altri suggerimenti

Dopo un po' di tempo su Google ho trovato questo post.

  1. Installa il mysql2psql gemma utilizzando [sudo] gem install mysql2psql.
  2. Crea un file di configurazione eseguendo mysql2psql.Vedrai un errore ma a mysql2psql.yml il file avrebbe dovuto essere creato.
  3. Modificare mysql2psql.yml
  4. Correre mysql2psql di nuovo per migrare i tuoi dati.

Mancia:Impostato force_truncate A true nel tuo mysql2psql.yml config se desideri che il database postgresql venga cancellato prima di migrare i tuoi dati.

ho usato py-mysql2pgsql.Dopo l'installazione è necessario solo un semplice file di configurazione in formato yml (sorgente, destinazione), ad esempio:

# if a socket is specified we will use that
# if tcp is chosen you can use compression
mysql:
 hostname: localhost
 port: 3306
 socket: /tmp/mysql.sock
 username: mysql2psql
 password:
 database: mysql2psql_test
 compress: false
destination:
 # if file is given, output goes to file, else postgres
 file:
 postgres:
  hostname: localhost
  port: 5432
  username: mysql2psql
  password:
  database: mysql2psql_test

Utilizzo:

> py-mysql2pgsql -h
usage: py-mysql2pgsql [-h] [-v] [-f FILE]

Tool for migrating/converting data from mysql to postgresql.

optional arguments:
  -h, --help            show this help message and exit
  -v, --verbose         Show progress of data migration.
  -f FILE, --file FILE  Location of configuration file (default:
                        mysql2pgsql.yml). If none exists at that path,
                        one will be created for you.

Maggiori informazioni sulla sua home page https://github.com/philipsoutham/py-mysql2pgsql.

C'è un software a pagamento elencato in questa pagina postgresql:http://www.postgresql.org/download/products/1

e questo è su pgFoundry:http://pgfoundry.org/projects/mysql2pgsql/

Questa pagina elenca le differenze di sintassi, ma non ho ancora trovato un semplice convertitore di query funzionante.Utilizzando un ORM package invece di SQL grezzo potrebbe prevenire questi problemi.

Attualmente sto hackerando un convertitore per una codebase legacy:

function mysql2pgsql($mysql){
    return preg_replace("/limit (\d+), *(\d+)/i", "limit $1 offset $2", preg_replace("/as '([^']+)'/i", 'as "$1"', $mysql)); // Note: limit needs order
}

Per CREATE dichiarazioni, SQLines ne converte la maggior parte online.In seguito ho comunque dovuto modificare mysqldump:

"mediumtext" -> "text", "^LOCK.*" -> "", "^UNLOCK.*" -> "", "`" -> '"', "'" -> "''" in 'data', "0000-00-00" -> "2000-01-01", deduplicate constraint names, " CHARACTER SET utf8 " -> " ".
"int(10)" -> "int" was missed in the last table, so pass that part of the mysqldump through http://www.sqlines.com/online again.

Prova questo, funziona a meraviglia!!

http://www.sqlines.com/online

Dai un'occhiata a Fonderia PG, le utilità extra per Postgres tendono a vivere lì.Credo però che lo strumento che stai cercando esista.

molto probabilmente non otterrai mai uno strumento per tale compito che farebbe tutto il tuo lavoro per te.preparati a fare tu stesso un po' di lavoro di refactoring.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top