Migrieren Sie von MySQL zu PostgreSQL unter Linux (Kubuntu)

Vor langer Zeit auf einem System weit, weit weg ...

Versuche, eine Datenbank von MySQL nach PostgreSQL zu migrieren. In der gesamten Dokumentation, die ich gelesen habe, wird ausführlich beschrieben, wie die Struktur migriert wird. Ich habe sehr wenig Dokumentation zur Migration der Daten gefunden. Das Schema enthält 13 Tabellen (die erfolgreich migriert wurden) und 9 GB Daten.

MySQL Version: 5.1.x
PostgreSQL Version: 8.4.x

Ich möchte die Programmiersprache R verwenden, um die Daten mit SQL-SELECT-Anweisungen zu analysieren. PostgreSQL hat PL / R, aber MySQL hat nichts (soweit ich das beurteilen kann).

Eine neue Hoffnun

Den Datenbankspeicherort erstellen /var hat nicht genügend Platz; Ich mag es auch nicht, die PostgreSQL-Versionsnummer überall zu haben - ein Upgrade würde die Skripte beschädigen!):

sudo mkdir -p /home/postgres/mainsudo cp -Rp /var/lib/postgresql/8.4/main /home/postgressudo chown -R postgres.postgres /home/postgressudo chmod -R 700 /home/postgressudo usermod -d /home/postgres/ postgres

lles gut hier. Starten Sie als nächstes den Server neu und konfigurieren Sie die Datenbank mit diesenInstallationsanleitun:

sudo apt-get install postgresql pgadmin3sudo /etc/init.d/postgresql-8.4 stopsudo vi /etc/postgresql/8.4/main/postgresql.confVeränderungdata_directory zu/home/postgres/mainsudo /etc/init.d/postgresql-8.4 startsudo -u postgres psql postgres\password postgressudo -u postgres createdb climatepgadmin3

Verwendenpgadmin3, um die Datenbank zu konfigurieren und ein Schema zu erstellen.

Die Episode wird in einer Remote-Shell namens @ fortgesetzbash, wobei beide Datenbanken ausgeführt werden und eine Reihe von Tools mit einem eher ungewöhnlichen Logo installiert werden:SQL Fairy.

perl Makefile.PLsudo make installsudo apt-get install perl-doc (Seltsamerweise heißt es nichtperldoc)perldoc SQL::Translator::Manual

Extrahieren Sie eine PostgreSQL-freundliche DDL und alleMySQL Daten

sqlt -f DBI --dsn dbi:mysql:climate --db-user user --db-password password -t PostgreSQL > climate-pg-ddl.sqlEditclimate-pg-ddl.sql und konvertieren Sie die Bezeichner in Kleinbuchstaben und fügen Sie die Schemareferenz ein (mit VIM)::%s/"\([A-Z_]*\)"/\L\1/g:%s/ TABLE / TABLE climate./g:%s/ on / on climate./gmysqldump --skip-add-locks --complete-insert --no-create-db --no-create-info --quick --result-file="climate-my.sql" --databases climate --skip-comments -u root -p

Es könnte sich lohnen, die Tabellen und Spalten in MySQL einfach in Kleinbuchstaben umzubenennen:

select concat( 'RENAME TABLE climate.', TABLE_NAME, ' to climate.', lower(TABLE_NAME), ';' ) from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='climate'; Führen Sie die Befehle aus dem vorherigen Schritt aus. Es gibt wahrscheinlich eine Möglichkeit, dies auch für Spalten zu tun. Ich habe sie manuell geändert, weil es schneller war, als herauszufinden, wie die Abfrage geschrieben wird.Die Datenbank schlägt zurück

Erstellen Sie die Struktur in PostgreSQL wie folgt neu:

pgadmin3 (wechsle dorthin)Drücke den Willkürliche SQL-Abfragen ausführen SymboOpenclimate-pg-ddl.sqlSuchen nachTABLE " ersetzen mitTABLE climate." (Geben Sie den Schemanamen @ eiclimate)Suchen nachon " ersetzen miton climate." (Geben Sie den Schemanamen @ eiclimate)Drücken SieF5 ausführe

Das führt zu

Query returned successfully with no result in 122 ms.
Antworten der Jedi

n diesem Punkt bin ich ratlo

Wo gehe ich von hier aus was sind die Schritte) umwandelnclimate-my.sql zuclimate-pg.sql damit sie gegen PostgreSQL ausgeführt werden können?Wie stelle ich sicher, dass die Indizes korrekt kopiert werden (um die referenzielle Integrität zu erhalten; ich habe derzeit keine Einschränkungen, um den Übergang zu vereinfachen)?Wie kann ich sicherstellen, dass das Hinzufügen neuer Zeilen in PostgreSQL mit der Aufzählung aus dem Index der zuletzt eingefügten Zeile beginnt (und nicht mit einem vorhandenen Primärschlüssel aus der Sequenz in Konflikt steht)?Wie stellen Sie sicher, dass der Schemaname bei der Umwandlung der Daten von MySQL in PostgreSQL-Einfügungen erhalten bleibt?Ressource

Um so weit zu kommen, war einiges an Information nötig:

https: //help.ubuntu.com/community/PostgreSQhttp: //articles.sitepoint.com/article/site-mysql-postgresql-http: //wiki.postgresql.org/wiki/Converting_from_other_Databases_to_PostgreSQL#MySQhttp: //pgfoundry.org/frs/shownotes.php? release_id = 810http: //sqlfairy.sourceforge.net

Vielen Dank

Antworten auf die Frage(8)

Ihre Antwort auf die Frage