Migration von MS Access zu PostgreSQL
Dieses dreitägige Seminar zeigt den Wechsel von der dateibasierten Desktop-Datenbank MS Access zum relationalen Client-Server-System PostgreSQL. Du lernst die architektonischen Unterschiede, das Mapping der Datentypen und die Übersetzung von Jet-SQL in ANSI-SQL/PL/pgSQL kennen, dazu die systematische Anpassung deines VBA-Codes, damit Access effizient, sicher und performant als Frontend für ein PostgreSQL-Backend weiterläuft. Am Ende weißt du, welche Schritte die Umstellung deiner Access-Anwendung auf PostgreSQL erfordert.
Für wen ist dieses Seminar
Das Seminar richtet sich an Access-Entwicklerinnen und -Entwickler, Datenbankadministratoren und IT-Projektleiter, die Access-Anwendungen skalieren oder ablösen möchten. Das Angebot richtet sich an Unternehmen, Behörden und Selbstständige.
Was du mitbringen solltest
Du bringst grundlegende Erfahrung in der Erstellung und Verwaltung von MS-Access-Datenbanken, VBA-Programmierung sowie allgemeine SQL-Kenntnisse mit. Geschult wird auf der jeweils aktuellen Version; bei Inhouse-Seminaren gern auch auf der Version, die ihr im Einsatz habt.
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 (
AutoWertzuSERIAL/IDENTITY,Ja/NeinzuBOOLEAN,AnlagezuBYTEA) - Übernahme von Tabellenbeziehungen und referenzieller Integrität
- Konvertierung von Gültigkeitsregeln zu PostgreSQL Check Constraints
- Benutzer, Rollen und Rechte: Access-Arbeitsgruppen-Sicherheit bzw. Windows-Benutzer und -Gruppen auf PostgreSQL-Rollen und das
GRANT-Konzept übertragen - Case-Sensitivity und Collation: Access vergleicht Zeichenketten standardmäßig ohne Beachtung von Groß-/Kleinschreibung, PostgreSQL standardmäßig mit — Lösungswege sind ICU-Collations mit passender Sortierfolge, nichtdeterministische Collations für case-insensitive Vergleiche und die Erweiterung
citextfür einzelne Spalten; nach einem Collation-Wechsel müssen betroffene Indexe neu aufgebaut werden
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()zuCASE,Nz()zuCOALESCE,Date()zuCURRENT_DATE) - Kreuztabellenabfragen in PostgreSQL abbilden (
tablefunc/CROSSTAB) - Gespeicherte Access-Abfragen als PostgreSQL-Views abbilden, inklusive der Frage, welche Abfragen sich stattdessen besser als PL/pgSQL-Funktion eignen
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 verknüpfter Tabellen (Linked Tables) automatisiert per VBA (
TableDef) - Vermeidung des
#Gelöscht-Fehlers in Access (Primärschlüssel-Zwang undRowVersionin PostgreSQL) - Performance-Optimierung von Formularen und Listenfeldern bei großen Datenmengen
- Unterschiede im Sperrverhalten und der Transaktionssteuerung bei verknüpften PostgreSQL-Tabellen
- Zeitgesteuerte Abläufe: Ablösung von Access-Makros und Windows-Aufgabenplanung für wiederkehrende Datenbankaufgaben durch
pg_cronoder einen externen Scheduler - Backup- und Wartungsstrategie für das PostgreSQL-Backend, unabhängig vom Access-Frontend — für Multi-Cluster-Szenarien lohnt ein Blick auf das quelloffene Werkzeug pg-clusterbackup
Dauer: 3 Tage
Was du danach kannst
- Architekturunterschiede zwischen der Access-Desktop-Datenbank und PostgreSQL einordnen und eine Migration methodisch planen
- Datentypen, Tabellenbeziehungen und Gültigkeitsregeln von Access nach PostgreSQL übertragen
- Jet-SQL-Abfragen und gespeicherte Abfragen in ANSI-SQL/PL/pgSQL beziehungsweise PostgreSQL-Views überführen
- VBA-Code inklusive Verbindungsaufbau, Pass-Through-Abfragen und Fehlerbehandlung auf PostgreSQL umstellen
- Benutzer, Rollen, Rechte und zeitgesteuerte Abläufe in der neuen Umgebung nachbilden
- Access performant und stabil als Frontend für ein PostgreSQL-Backend weiterbetreiben
Verwandte Seminare
- PL/pgSQL-Programmierung — für alle, die PL/pgSQL unabhängig von der Migration von Grund auf lernen wollen
- PostgreSQL Administration — Betrieb, Backup und Wartung der Zielumgebung
- SQL Grundlagen — für alle, die ihre SQL-Basis vor der Migration auffrischen wollen
- PostgreSQL Performance-Tuning — Feintuning nach dem Go-Live
Dein Dozent
Frank Glück schult seit mehr als 30 Jahren und programmiert seit fast 40 Jahren. Seit 1999 ist er auch als Dozent für die GFU tätig. Umstellungen von Access-Anwendungen auf ein PostgreSQL-Backend begleitet, coacht oder führt er seit 1999 durch — vom Fachbereich im Konzern bis zur Behörde; er kennt beide Seiten aus eigenen Projekten und zeigt praxisnah, wie solche Umstellungen gelingen.
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 deutlich besserer 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 (timestamp 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.