Migration von SQL Server zu PostgreSQL

Einleitung

Dieses Seminar vermittelt die Methodik, Werkzeuge und Best Practices für eine erfolgreiche Datenbankmigration von Microsoft SQL Server zu PostgreSQL. Teilnehmer erlernen die fundamentalen Architekturunterschiede, das Mapping von Datentypen, die Konvertierung von T-SQL-Code zu PL/pgSQL sowie Strategien für die reibungslose Datenübernahme, das Testing und die abschließende Performance-Optimierung im PostgreSQL-Betrieb.

Zielgruppe & Voraussetzungen

  • Zielgruppe: Datenbankadministratoren (DBAs), Datenbankentwickler, Systemarchitekten und Migrationsberater.
  • Voraussetzungen: Fundierte Erfahrungen in der Administration und Entwicklung mit Microsoft SQL Server (T-SQL) sowie grundlegende relationale Datenbankkenntnisse.

Detaillierte Inhalte

Architektur- und Konzeptvergleich

  • Systemarchitektur: SQL Server Instanz/Datenbanken vs. PostgreSQL Cluster/Datenbanken
  • Speichermodell: Filegroups und Transaktionsprotokolle vs. Tablespaces und WAL (Write-Ahead Logging)
  • Nebenläufigkeit: Locking/Blocking in SQL Server vs. Multi-Version Concurrency Control (MVCC) in PostgreSQL
  • Temporäre Objekte: tempdb und #temp-Tabellen vs. lokale temporäre Tabellen in PostgreSQL
  • Systemkataloge: System Views (sys.*) vs. Information Schema und pg_catalog

Migrationsstrategien und Werkzeuge

  • Phasen eines Migrationsprojekts (Assessment, Schema, Daten, Code, Testing, Cutover)
  • Migrationsansätze: Big Bang vs. Phasenweise Migration
  • Werkzeuge zur automatisierten Migration: AWS Schema Conversion Tool (SCT), pgloader
  • Übersicht alternativer Ansätze (z. B. Babelfish for PostgreSQL)
  • Kompatibilitätsbewertung und Aufwandsschätzung

Schema- und Strukturmigration

  • Mapping der Datentypen (z. B. DATETIME zu TIMESTAMP, BIT zu BOOLEAN, VARCHAR(MAX) zu TEXT, UNIQUEIDENTIFIER zu UUID)
  • Konvertierung von IDENTITY-Spalten zu SERIAL oder GENERATED ALWAYS AS IDENTITY
  • Übertragung von Constraints (Primary Key, Foreign Key, Check, Unique)
  • Index-Architektur: Clustered Indexes (SQL Server) vs. Heap Tables mit B-Tree Indexes (PostgreSQL)
  • Implementierung von Partitionierung und berechneten Spalten (Computed Columns)
  • Umgang mit Case-Sensitivity und Collation-Unterschieden

Code-Migration: T-SQL zu PL/pgSQL

  • Syntaxunterschiede zwischen T-SQL und PL/pgSQL
  • Migration von Stored Procedures, UDFs und Triggern
  • Transaktionssteuerung: Implizite/Explizite Transaktionen und Fehlerbehandlung (TRY...CATCH zu EXCEPTION-Blöcken)
  • Ersetzen von T-SQL-Spezifika: ISNULL/COALESCE, GETDATE() zu CURRENT_TIMESTAMP, TOP zu LIMIT/OFFSET
  • Konvertierung von temporären Tabellenvariablen (@table) und Cursorn
  • Lösungsansätze für fehlende globale Variablen (z. B. @@ROWCOUNT, @@ERROR)
  • Anpassung von dynamischem SQL (sp_executesql zu EXECUTE)

Datenübernahme und Synchronisation

  • Initiale Datenmigration: Massendatenexport/-import (von BCP zu COPY)
  • Direkte Datenbankverbindungen: Einsatz des TDS Foreign Data Wrappers (tds_fdw) als Ersatz für Linked Servers
  • Change Data Capture (CDC) und logische Replikation für ausfallarme Migrationen (Zero Downtime)
  • Behandlung von Zeichensatz- und Encoding-Problemen während des Transfers

Testing, Validierung und Go-Live

  • Strategien zur Verifizierung der Datenkonsistenz (Row Counts, Hash-Summen)
  • Funktionstests für migrierte Geschäftslogik und Schnittstellen
  • Last- und Performancetests auf dem neuen System
  • Cutover-Planung und Rollback-Szenarien

Performance-Optimierung und PostgreSQL-Betrieb

  • Wichtige Tuning-Parameter in der postgresql.conf im Vergleich zu sp_configure
  • Das Autovacuum-Konzept als Ersatz für SQL Server Index-Rebuild- und Statistik-Wartungspläne
  • Performance-Analyse: SQL Server Profiler / Extended Events vs. pg_stat_statements und EXPLAIN ANALYZE
  • Anpassung von Backup- und Recovery-Strategien (Ablösung von SQL Server Backups durch pg_dump und kontinuierliche Archivierung/pgBackRest)

Dauer 3 Tage