Spaltenname macht Probleme

Moin,

ich möchte eine ziemlich große Datenbank von MySQL zu PostgreSQL migrieren und habe die Funktionen bereits alle umgeschrieben. Für die Migration der eigentlichen Dateien nutze ich mysql2psql (https://github.com/maxlapshin/mysql2postgres).

Ich habe jetzt nur das Problem, dass in einer Tabelle bei Mysql die Spaltennamen “start” und “end” verwendet werden und ich die Funktionen dahin abgeändert habe, dass sie nun “start_p” und “end_p” heißen. Und da kommt auch schon das Problem: mysql2psql meckert aufgrund der unterschiedlichen Spaltennamen in der einen Datei.

Meine bisherige Idee dazu waren, dass ich die Tabelle in Postgresql auch mit “start” und “end” die Spalten benenne, aber mir wurde schon gesagt, dass ich das lieber sein lassen soll. Die Spalten darf ich in Mysql auch nicht umbenennen, da das zu Problemen führen würde.

Die Frage ist nun also: Wie kann ich die Daten von Mysql nach Postgresql migrieren und automatisch die Spaltennamen beachten?

Grüße
betaros

Vielleicht gibt es eine andere Lösung aber ich hatte einmal ein ähnliches Problem bei einer Migration von MySQL zu MS SQL. Ich habe einfach die Ursprungstabelle auf dem MySQL Server kopiert, modifiziert und als Ausgang verwendet. Somit war die Originaltabelle in MySQL noch unangetastet und ich konnte problemlos migrieren.

cu tb.

Danke für die schnelle Reaktion. :slight_smile:

Das wäre natürliche eine Lösung, aber ich befüchte Speicherplatzprobleme :p Ich hab das jetzt erstmal so gemacht, dass er die Tabelle mit “start” und “end” anlegt, dann meckert mysql2psql nicht mehr und danach änder ich mit ALTER TABLE die Namen der Spalten zurück. Aber so richtig elegant finde ich die Lösung auch nicht… :rolleyes:

Falls es also weitere Ideen gibt, immer her damit :wink:

Grüße
betaros

“start” ist kein Problem, “end” hingegen schon. Um reservierte Schlüsselwörter als Spaltennamen zu verwenden musst Du diese in Anführungszeichen setzen:

postgres=> create table foo (start integer, end integer);
ERROR:  syntax error at or near "end"
LINE 1: create table foo (start integer, end integer);
                                         ^
postgres=> create table foo (start integer, "end" integer);
CREATE TABLE
postgres=>

Grundsätzlich sollte man sowas tatsächlich vermeiden, da nicht immer alle Tools mit solchen “quoted identifier” zurechtkommen. Wenn Dein Migrationstool das schafft, dann sehe ich kein Problem das zu verwenden. Nach der Migration kannst Du Dir ja dann immer noch überlegen ob Du die Spalten umbenennst.

Mehr Details zum Thema “quoted identifier” gibt’s im Handbuch: PostgreSQL: Documentation: 16: 4.1. Lexical Structure