Migrieren Sie von MySQL zu PostgreSQL unter Linux (Kubuntu)
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 HoffnunDen 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/main
sudo cp -Rp /var/lib/postgresql/8.4/main /home/postgres
sudo chown -R postgres.postgres /home/postgres
sudo chmod -R 700 /home/postgres
sudo 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 pgadmin3
sudo /etc/init.d/postgresql-8.4 stop
sudo vi /etc/postgresql/8.4/main/postgresql.conf
Veränderungdata_directory
zu/home/postgres/main
sudo /etc/init.d/postgresql-8.4 start
sudo -u postgres psql postgres
\password postgres
sudo -u postgres createdb climate
pgadmin3
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.PL
sudo make install
sudo 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.sql
Editclimate-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./g
mysqldump --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ückErstellen Sie die Struktur in PostgreSQL wie folgt neu:
pgadmin3
(wechsle dorthin)Drücke den Willkürliche SQL-Abfragen ausführen SymboOpenclimate-pg-ddl.sql
Suchen nachTABLE "
ersetzen mitTABLE climate."
(Geben Sie den Schemanamen @ eiclimate
)Suchen nachon "
ersetzen miton climate."
(Geben Sie den Schemanamen @ eiclimate
)Drücken SieF5
ausführeDas führt zu
Query returned successfully with no result in 122 ms.
Antworten der Jedin 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?RessourceUm 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.netVielen Dank