Daten von MySQL nach PostgreSQL zu portieren hat sich als ein bischen knifflig erwiesen, zumal sich Postgres ein bischen mehr an den SQL92-Standard hält als MySQL. In meinem Fall war es mit einem einfachen SQL-Dump einfach nicht getan, da die Datentypen einfach nicht zueinander passen.
Um die Daten von MySQL nach PostgreSQL zu portieren, muss man sie zunächst mit einem mysqldump in eine Datei schreiben, um die Datentypen anzupassen. Da in meinem Fall das komplette File knapp 250MB groß ist und sich das mit nem Text-Editor schlecht editiert, exportiert man am Besten Struktur und Daten getrennt.
mysqldump -u username -p databasename --no-data > structure.sql
mysqldump -u username -p databasename --no-create-info > data.sql
Möchte man bei der Gelegenheit gleich noch den Zeichensatz wechseln, kann man das mit Hilfe des Tools iconv tun.
iconv -f latin1 -t utf-8 data.sql > utf-data.sql
Zur Konvertierung der MySql-Syntax nach Postgresql nutze ich ein kleines Tool namens mysql2pgsql von GBorg.
wget ftp://gborg.postgresql.org/pub/mysql2psql/stable/mysql2pgsql.tar.gz
mysql2pgsql structure.sql pgstructure.sql
Auf der Kommandozeile hilft es den mysql-Dump in einen postgresql-Dump zu verwandeln. Leider jedoch nicht ohne manuells nachhelfen. So kommt das Programm z.B. mit der MySQL Angabe TYPE=MYISAM nicht klar und läßt es im Quelltext stehen. Bei manchen meiner UNIQUE-Contraints taucht das Wort UNIQUE mehrfach auf, welche ich auch manuell entfernen muss. Auch Bezeichner, die in Postgres nun Schlagworte sind, es in MySQL aber nicht sind, werden nicht gefiltert, sodaß man diese entweder umbennen muss oder einfach in doppelte Anführungszeichen packt.