Question

J'ai essayé les outils répertoriés ici , certains avec plus de succès que d'autres, mais aucun m'a donné la syntaxe postgres valide que je pourrais utiliser (erreurs tinyint, etc.)

Était-ce utile?

La solution

Il existe une option mysqldump qui permet de générer le code PostgreSQL:

mysqldump --compatible=postgresql ...

Autres conseils

Après un certain temps sur Google, j'ai trouvé cet article .

  1. Installez le mysql2psql à l'aide de [sudo] gem installer mysql2psql .
  2. Créez un fichier de configuration en exécutant mysql2psql . Vous verrez une erreur, mais un fichier mysql2psql.yml aurait dû être créé.
  3. Éditez mysql2psql.yml
  4. Exécutez à nouveau mysql2psql pour migrer vos données.

Conseil: Définissez force_truncate sur true dans votre fichier de configuration mysql2psql.yml si vous souhaitez que la base de données postgresql soit effacée avant la migration de vos données. .

J'ai utilisé py-mysql2pgsql . Après l’installation, un simple fichier de configuration au format yml (source, destination), par exemple:

, est nécessaire.
# 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

Utilisation:

> 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.

Plus d'informations sur sa page d'accueil https://github.com/philipsoutham/py-mysql2pgsql .

Un logiciel payant est répertorié sur cette page postgresql: http://www.postgresql.org/download/products/1

et cela se trouve sur pgFoundry: http://pgfoundry.org/projects/mysql2pgsql/

Cette page répertorie les différences de syntaxe, mais un convertisseur de requête simple ne fonctionne pas. trouvé encore. L'utilisation d'un package ORM au lieu d'un code SQL brut pourrait éviter ces problèmes.

Je pirate actuellement un convertisseur pour une base de code héritée:

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
}

Pour les instructions CREATE , SQLines convertit la plupart d'entre elles en ligne. Je devais quand même éditer le mysqldump par la suite, cependant:

"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.

Essayez celui-ci, ça marche à merveille !!

http://www.sqlines.com/online

Consultez PG Foundry . Les utilitaires supplémentaires pour Postgres ont tendance à y être installés. Je pense que l’outil que vous recherchez existe bien.

vous n’obtiendrez probablement jamais un outil pour une telle tâche qui ferait tout votre travail pour vous. soyez prêt à effectuer vous-même des travaux de refactoring.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top