Migration von MS Access zu PostgreSQL

Dieses Seminar fokussiert sich auf den Wechsel von der dateibasierten Desktop-Datenbank MS Access zu dem relationalen Client-Server-RDBMS PostgreSQL. Teilnehmer erlernen die architektonischen Unterschiede, das korrekte Mapping von Datentypen, die Übersetzung von Jet-SQL in ANSI-SQL/PL/pgSQL sowie Strategien zur Datenübernahme. Ein zentraler Schwerpunkt liegt auf der systematischen Anpassung des bestehenden VBA-Codes, um MS Access effizient, sicher und performant als Frontend für ein PostgreSQL-Backend weiterzunutzen.

Zielgruppe / Voraussetzungen

  • Zielgruppe: Access-Entwickler, Datenbankadministratoren und IT-Projektleiter, die Access-Anwendungen skalieren oder ablösen möchten.
  • Voraussetzung: Grundlegende Erfahrungen in der Erstellung und Verwaltung von MS Access-Datenbanken, VBA-Programmierung sowie allgemeine SQL-Kenntnisse.

Detaillierte Inhalte

Architektur- und Konzeptvergleich

  • Desktop-Datenbank (JET/ACE Engine) vs. Client-Server-Architektur (PostgreSQL)
  • Speichermodelle: Einzelne .mdb/.accdb-Datei vs. PostgreSQL Data Directory
  • Nebenläufigkeit (Concurrency): Access File-Locking vs. PostgreSQL MVCC
  • Sicherheits- und Berechtigungskonzepte

Migrationsstrategien und Werkzeuge

  • Phasen der Migration (Datenstrukturen, Daten, Abfragen, Formulare/Berichte, VBA-Code)
  • Architektur-Entscheidung: Komplettablösung vs. Access-Frontend mit PostgreSQL-Backend
  • Evaluierung von Migrationswerkzeugen (mdbtools, Bullzip, pgAdmin)
  • Installation und Konfiguration der PostgreSQL ODBC-Treiber (psqlODBC)

Schema- und Strukturmigration

  • Best Practices für Namenskonventionen (Migration zu snake_case)
  • Mapping der Datentypen (AutoWert zu SERIAL/IDENTITY, Ja/Nein zu BOOLEAN, Anlage zu BYTEA)
  • Übernahme von Tabellenbeziehungen und referenzieller Integrität
  • Konvertierung von Gültigkeitsregeln zu PostgreSQL Check Constraints

Code-Migration: Jet-SQL zu PostgreSQL (ANSI SQL / PL/pgSQL)

Wer PL/pgSQL nicht nur portieren, sondern von Grund auf lernen möchte, findet das im Seminar PL/pgSQL-Programmierung.

  • Syntaxunterschiede: Jet-SQL vs. PostgreSQL
  • Platzhalter (Wildcards) anpassen: * und ? zu % und _
  • String-Verkettungen: & zu ||
  • Access-spezifische Funktionen ersetzen (IIf() zu CASE, Nz() zu COALESCE, Date() zu CURRENT_DATE)
  • Kreuztabellenabfragen in PostgreSQL abbilden (tablefunc / CROSSTAB)

VBA-Code Anpassungen und Backend-Kommunikation

  • Datenzugriffstechnologien: DAO vs. ADO im direkten Zusammenspiel mit PostgreSQL
  • Dynamische Anpassung und Verwaltung von ODBC-Connection Strings via VBA (DSN vs. DSN-less Connections)
  • Erstellung und Ausführung von Pass-Through-Abfragen per VBA (QueryDef-Objekt) zur Serverentlastung
  • Aufruf von serverseitigen PostgreSQL-Funktionen und -Prozeduren (PL/pgSQL) aus VBA
  • Sichere Parameterübergabe an PostgreSQL via ADO Command-Objekte
  • Optimierung von Recordsets: Serverseitige vs. clientseitige Cursor (CursorLocation)
  • Behandlung von ODBC- und PostgreSQL-spezifischen Fehlern in VBA (On Error GoTo, Errors-Auflistung)
  • Umschreiben dynamisch generierter SQL-Strings im VBA-Code auf PostgreSQL-Syntax
  • Refactoring: Auswertung, welche VBA-Geschäftslogik in performante PL/pgSQL-Prozeduren ausgelagert werden sollte

Datenübernahme und Synchronisation

  • Initiale Datenmigration via CSV und performantem PostgreSQL COPY
  • Datenübertragung via ODBC (INSERT INTO ... SELECT)
  • Behebung von Zeichensatzproblemen (Windows-1252 nach UTF-8)
  • Validierung der migrierten Datenstrukturen

MS Access als Frontend für PostgreSQL (Optimierung)

  • Einbinden und Aktualisieren von Tabellen (Linked Tables) automatisiert per VBA (TableDef)
  • Vermeidung des #Gelöscht-Fehlers in Access (Primärschlüssel-Zwang und RowVersion in PostgreSQL)
  • Performance-Optimierung von Formularen und Listenfeldern bei großen Datenmengen
  • Unterschiede im Sperrverhalten und der Transaktionssteuerung bei verknüpften PostgreSQL-Tabellen

Dauer 3 Tage


Häufige Fragen (FAQ)

Kann Microsoft Access nach der Migration weiter als Frontend genutzt werden?

Ja, ein bewährtes Migrationsmuster ist die Beibehaltung der bestehenden MS Access-Formulare und -Berichte, während Tabellen über verknüpfte ODBC-Tabellen (Linked Tables) auf PostgreSQL ausgelagert werden. Dies sichert bestehende Investitionen bei drastisch gesteigerter Datenintegrität und Mehrbenutzerfähigkeit.

Warum tritt bei verknüpften PostgreSQL-Tabellen oft der Fehler „#Gelöscht“ in Access auf?

Der berüchtigte #Gelöscht-Fehler entsteht, wenn MS Access Zeilen nach einem Update nicht eindeutig wiedererkennen kann. Die Lösung besteht in der zwingenden Definition von Primärschlüsseln in PostgreSQL und dem Einsatz einer Zeitstempel-Spalte ( imestamp with time zone) oder eines generierten Schlüssels, der Access präzise Zeilenidentifikation ermöglicht.

Wie werden Access-Abfragen mit Funktionen wie IIf() oder Nz() übersetzt?

MS Access-spezifische Ausdrücke werden in ANSI-SQL überführt: IIf(Bedingung, Wahr, Falsch) wird zu CASE WHEN Bedingung THEN Wahr ELSE Falsch END, und Nz(Wert, Ersatz) wird sauber durch die Standardfunktion COALESCE(Wert, Ersatz) ersetzt.

Wer unterrichtet die Migration von Access zu PostgreSQL?

Trainer ist Frank Glück. Mit über 30 Jahren Erfahrung als Dozent und fast 40 Jahren Entwicklungs- und Datenbankpraxis kennt er Microsoft Access und PostgreSQL bis ins letzte Detail und zeigt praxisnah, wie Client-Server-Umstellungen ohne Reibungsverluste gelingen.


Individuell anfragen