Migration von MS Access zu PostgreSQL

Einleitung

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)

  • 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