Esiste uno strumento semplice per convertire la sintassi mysql in postgresql?
-
01-07-2019 - |
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.)
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.
- Installa il mysql2psql gemma utilizzando
[sudo] gem install mysql2psql
. - Crea un file di configurazione eseguendo
mysql2psql
.Vedrai un errore ma amysql2psql.yml
il file avrebbe dovuto essere creato. - Modificare
mysql2psql.yml
- 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.