Übernahme von MS-ACCESS

Hallo,

ich möchte eine größere Anzahl von Tabellen aus einer MS-ACCESS (Frontend / Backend getrennt) übernehmen. Die Daten sollen zukünftig in PostgreSQL gespeichert werden. Die ACCESS-DB liegt noch auf einem WINDOWS-Laufwerk, PostgreSQL läuft unter LINUX.

Auf der Suche nach der besten Methode zur Übernahme habe ich zwei Seiten gefunden:

  • Das offizielle Wiki: Der in Stage 1 angegebene Link für das Upsizing-Tool funktioniert nicht mehr; damit funktionieren auch die folgenden Schritte nicht.


  • Dies hier aus dem Forum, allerdings verstehe ich den Text

tabellen in postgrs anlegen und in die access-db verknüpfen (nicht importieren!). dann einfach eine hinzufügen-abfrage erstellen…

nicht wirklich.

Also: Was ist heute das Mittel der Wahl um die Daten (einmalig) zwischen den PCs und Betriebssystemen zu übertragen?
Danke, Michael

Der einfachste Weg wäre vermutlich, die Daten in Access als CSV-dateien zu speichern (je Tabelle eine CSV) die Tabellen in PG passend anlegen und dann die CSV’s da einlesen. Dazu gibt es den COPY-Befehl. es gibt IMHO auch Tools, die einen direkten SQL-Dump aus Access machen können.

Versuche also erst einmal den Export aus Access heraus in einen menschlich lesbaren Dump oder in CSV, das wäre der erste Schritt. Wie viele Tabellen sind es? Gibt es viele Foreign-Key-Constraints und so?

Du legst die Tabellen in Postgres an, verknüpfst diese Datenbank mit ODBC und liest deine Daten mit einer einfachen Access-Anfügeabfrage nacheinender in die Postgrestabellen. Wenn du den csv-Weg nimmst, achte auf das Encoding.

Gruß Uwe

“verknüpfst diese Datenbank mit ODBC” ist etwas kurz und bedeutet.
Nach der Erstellung der Zieltabellen in PG, erzeugst Du für jede PG Zieltabelle eine Verknüpfung (verknüpfte Tabelle) in Access via ODBC > https://www.youtube.com/results?search_query=access+odbc+tabelle+verknüpfen&pbjreload=10
Dann erstellst Du für jede Tabelle eine Anfügeabfrage, die Du einzeln ausführst.

Ich würde es mit einer kleinen Tabelle ausprobieren und bei einer großen Tabelle einen Geschwindigkeitstest machen. Die gleiche Tabelle noch mal mit CSV export / import. Dann entscheiden was schneller läuft und leichter zu handhaben ist.

Ich würde übrigens in beiden Varianten nicht so pingelig mit den Datentypen sein. Wenn erstmal alles drüben ist, kannst Du nach Herzenslust stutzen, vorher wird das nur eine endlose Quälerei.

Vor etlichen Jahren habe ich das mit einem Skript von hier
http://www.cynergi.com/exportsql-converter.html
gemacht. Das ging prima.
Das habe ich für meine Zwecke noch angepasst.
Wenn der Converter deine Variante wäre und du Interesse an meinen Anpassungen hast dann könnte ich in meinem Archiv kramen und dir die Variante zukommen lassen.

Hallo,
vielen Dank für die Rückmeldungen. Es sind ca. 220 Tabellen zu übertragen.

Was meint ihr mit

Du legst die Tabellen in Postgres an

oder

Tabellen in PG passend anlegen

? Die ganzen Strukturen, Feldtypen etc. neu eintippseln? Sehr aufwendig und Fehler-anfällig, denke ich.

@ ulischerrer: Das Skript würde ich sehr gerne verwenden!

Hallo PGmicha,

siehe hier:
https://www.scherrer-software.de/demo/exportTables.vba

Kopiere den Code in ein neues Modul von Access. Das ist damals in Access 2003 gelaufen, also schon angestaubt.
Passe zuerst die Konstanten im Modulkopf an, insbesondere den Ausgabepfad.
Mit Glück gehts dann direkt aber teste es mal an einer Tabelle. Wie, das siehst du im Code.
Ich hatte mir ein zusätzliches Feld “trans_date” ausgeben lassen, das lässt sich aber ausschalten…

Viel Glück
Uli

Vielleicht hilft auch die FDW Extension mittels ODBC Zugriff auf ACCESS.
Das würde aber bedeuten, man braucht -als Zwischenschriftt- eine Windows Postgresinstallation.

Wer soll das wissen, wenn Du diese Anwendung hast?
Wenn es geht, dann musst Du halt von mySQL nach Postgres?

Du kannst Dich aber auch mal fragen, wie realistisch es ist, auf diese Weise ein “werkzeug” für eine Migration von Access weg einzusetzen und auf einen Null Fehler Lauf zu hoffen.

Daten Migration ist immer auch Handarbeit. Man will vielleicht nicht jede Tabelle einzeln anfassen, geschweige viele einzelne Datensätze. Aber mit Access als Ausgangsbasis, Leerzeichen und anderer Prosa in ObjectNamen und was weiß ich noch, steht einfach etwas Handarbeit an.
Ich schließe nicht aus, dass es kostenpflichtige Tools gibt, die das alles wegatmen.

Vielleicht tut’s auch einfach etwas Handarbeit am VB Code oder die FDW Variante, die ich oben vorschlug.

Ich habe hier einen Konverter gefunden und getestet, der nach bisherigen Erkenntnissen die Aufgabenstellung recht gut erledigt: Nur Feldkommentare werden (wie auch in der zitierten WorkBench-Applikation) nicht übernommen; diese parse ich aus der ACCESS-Struktur in die CREATE-Anweisungen.

Es gibt eine ähnliche Applikation auch für andere Quell- und Ziel-Systeme (z.B. mySQL).