AWS RDS/Aurora PostgreSQL zu Hetzner Cloud migrieren – pg_dump/restore Guide

Hinweis zum Inhalt: Die Informationen in diesem Artikel wurden nach bestem Wissen zum Zeitpunkt der Veröffentlichung zusammengestellt. Technische Details, Preise, Versionen, Lizenzmodelle und externe Inhalte können sich ändern. Bitte prüfen Sie die genannten Angaben eigenständig, insbesondere vor geschäftskritischen oder sicherheitsrelevanten Entscheidungen. Dieser Artikel ersetzt keine individuelle Fach-, Rechts- oder Steuerberatung.

AWS-Kosten explodieren? RDS zu teuer? Wir migrieren eure PostgreSQL-Datenbanken von AWS RDS/Aurora zu Hetzner Cloud – mit minimalem Risiko und klarem Cutover-Plan. 👉 Zur AWS-Migration-Übersicht | Kostenlose Analyse anfragen
AWS ist für viele Teams der Startpunkt – und später der Kostentreiber. Spätestens wenn eine Anwendung stabil läuft, werden die „weichen" Posten sichtbar: laufende RDS-Instanzkosten, Storage/IO, Backups – und vor allem Datenverkehr/Egress. AWS weist selbst darauf hin, dass Data-Transfer-Kosten beim Architekturdesign oft übersehen werden (AWS Blog).
Dazu kommt bei EU-Unternehmen immer häufiger ein zweites Motiv: digitale Souveränität und Datenhoheit. Seit Schrems II ist das Thema Drittlandtransfer und EU-konforme Cloud-Architektur stärker auf dem Radar (EuroCloud). Hetzner betreibt eigene Rechenzentren in Nürnberg, Falkenstein (DE) und Helsinki (FI) (Hetzner Docs).
In diesem Beitrag geht es um den häufigsten Exit-Schritt nach Storage: AWS RDS PostgreSQL → PostgreSQL auf einer Hetzner Cloud VM. Und weil Downtime akzeptabel ist, ist die Default-Empfehlung klar: pg_dump/pg_restore – der pragmatischste, am besten kontrollierbare Weg.
Inhaltsverzeichnis
- Empfehlung und Zielbild
- Zielsystem vorbereiten: Hetzner VM und PostgreSQL
- Migration mit pg_dump/pg_restore
- CMD-Beispiele
- Validierung nach Migration
- Häufige Fallstricke
- Cutover-Checkliste
- Alternativen bei minimaler Downtime
- Unser Vorgehen bei WZ-IT
- Weiterführende Guides
Empfehlung und Zielbild
Default-Empfehlung: pg_dump/pg_restore
Wenn ihr RDS nutzt und ein Wartungsfenster (Downtime) akzeptabel ist:
- Der Ansatz ist erprobt, stabil und transparent – native PostgreSQL-Tools reichen aus (AWS Docs)
- Komplizierte Replikation, Logical Replication oder DMS-Setups entfallen
- Für Datenbanken bis ca. 100-500 GB ist ein Wartungsfenster realistisch planbar
Zielbild bei Hetzner: Es gibt kein "Managed PostgreSQL" bei Hetzner Cloud. Das Ziel ist: VM anlegen und PostgreSQL selbst installieren/betreiben – mit voller Kontrolle über Konfiguration, Backups und Updates.
Zielsystem vorbereiten: Hetzner VM und PostgreSQL
VM und Storage anlegen
- VM in Hetzner Cloud anlegen
- Ubuntu LTS (z.B. 22.04) oder Debian
- Genügend RAM/CPU entsprechend der DB-Last
- Separates Volume für
/var/lib/postgresql(Wachstum/Backups) - Private Network / Firewall-Regeln für Zugriff
PostgreSQL installieren
sudo apt update
sudo apt install -y postgresql postgresql-contrib
sudo systemctl enable --now postgresql
Datenbank und User anlegen:
sudo -u postgres createuser --pwprompt appuser
sudo -u postgres createdb -O appuser appdb
Remote-Zugriff konfigurieren
postgresql.conf:listen_addressesnur auf benötigte IPspg_hba.conf: nur explizite Netze/IPs erlauben- Firewall: Port 5432 nur von Migration-Host/App-Netz
Backup-Strategie definieren
Ab jetzt seid ihr selbst DBA. Minimum:
- Nightly
pg_dump+ Rotation - VM/Volume Snapshots (zusätzlich, nicht allein)
- Optional: WAL-Archivierung für Point-in-Time Recovery
Migration mit pg_dump/pg_restore
Ablauf (High-Level)
- Wartungsfenster starten – App in Maintenance / Read-Only
- Dump erstellen (komprimiert, optional parallel)
- Transfer des Dumps zur Hetzner-VM
- Restore auf Ziel-PostgreSQL
- Fixups – Extensions, Owner, Grants, Sequences
- Validierung – Counts, Stichproben, Smoke Tests
- Cutover – App-Connection-String umstellen
- Monitoring – Altes RDS vorerst read-only lassen (Rollback-Fenster)
CMD-Beispiele
Dump (AWS RDS als Quelle)
Custom Format (kompakt, flexibel):
export PGPASSWORD="<AWS_PASSWORD>"
pg_dump \
-h <AWS_HOST> -p 5432 -U <AWS_USER> -d <DBNAME> \
-Fc -Z 6 \
-f db.dump
-Fc: Custom Format (ideal für pg_restore)-Z 6: Kompression
Directory Format + parallel (für große DBs):
pg_dump \
-h <AWS_HOST> -p 5432 -U <AWS_USER> -d <DBNAME> \
-Fd -j 8 \
-f dumpdir/
Transfer zur Hetzner VM
rsync -avP db.dump root@<HETZNER_VM_IP>:/root/
Restore auf Hetzner VM
Datenbank anlegen:
export PGPASSWORD="<HETZNER_PASSWORD>"
createdb -h <HETZNER_VM_IP> -p 5432 -U <HETZNER_USER> <DBNAME>
Restore:
pg_restore \
-h <HETZNER_VM_IP> -p 5432 -U <HETZNER_USER> -d <DBNAME> \
--no-owner --no-privileges \
-j 8 \
/root/db.dump
Warum
--no-owner --no-privileges? Beim Provider-Wechsel wollt ihr Rollen/Grants kontrolliert auf euer Zielmodell ziehen, statt AWS-Defaults zu importieren.
Statistiken aktualisieren:
ANALYZE;
Validierung nach Migration
Harte Checks (Daten)
- Rowcounts für kritische Tabellen vergleichen
- Summenchecks (z.B. Rechnungsbeträge)
- Stichproben (IDs) quer prüfen
SELECT 'users' AS t, count(*) FROM public.users
UNION ALL
SELECT 'orders' AS t, count(*) FROM public.orders;
Smoke Tests (Applikation)
- Login funktioniert
- 2-3 wichtigste Geschäftsprozesse (Create/Update/Payment)
- Background Jobs / Cron
- Schreibpfade testen (Insert/Update/Delete)
Performance Quickcheck
- Connection Pooling konfiguriert?
- Error Rate & DB Connections nach Cutover beobachten
Häufige Fallstricke
| Problem | Lösung |
|---|---|
| Extensions fehlen | Vorab inventarisieren (SELECT * FROM pg_extension) und auf Ziel installieren |
| Sequences falsch | nextval() stimmt nicht → per Script setval() anpassen |
| Grants/Owner fehlen | Nachziehen, weil --no-owner/--no-privileges genutzt wird |
| Timeouts beim Dump | Parallelisieren (-j), Wartungsfenster anpassen |
Cutover-Checkliste
T-7 bis T-2 Tage
- Hetzner VM + Volume steht (Location gewählt)
- PostgreSQL installiert, Firewall/pg_hba konfiguriert
- Backup-Job auf Ziel aktiv
- Probedump/Proberestore durchgeführt
T-24h
- Wartungsfenster kommuniziert
- Rollback definiert (Conn-String zurück auf RDS)
- Smoke-Test-Szenarien dokumentiert
Cutover
- App Read-Only / Maintenance
- Dump erstellt + transferiert + restore
- Validierung: Counts + Stichproben + Smoke Tests
- App auf Hetzner DB umgestellt
- Monitoring (Errors, DB connections, latency)
T+24h
- RDS noch read-only behalten (Sicherheitsnetz)
- Performance & Fehler beobachten
- RDS dekommissionieren, wenn stabil
Alternativen bei minimaler Downtime
Wenn Dump/Restore zu lang dauert oder Downtime kritisch ist:
- Logical Replication (Publication/Subscription) – Low Downtime, mehr Setup (AWS Blog)
- AWS DMS (Full Load + CDC) – orchestriert, aber Setup-Aufwand (AWS Docs)
Für diesen Artikel – weil Downtime ok – bleibt pg_dump/restore die Default-Empfehlung.
Unser Vorgehen bei WZ-IT
Unser Standard-Flow für AWS RDS → Hetzner PostgreSQL:
- Assessment: DB-Größe, Extensions, Änderungsrate, Downtime-Budget
- Zielsystem: Hetzner VM provisionieren, PostgreSQL installieren, Firewall/Backup
- Testmigration: Probedump auf Test-DB, Validierung, Performance-Check
- Cutover-Planung: Wartungsfenster, Rollback-Plan, Kommunikation
- Migration: Dump → Transfer → Restore → Validierung → Cutover
- Monitoring: Error Rates, Latenzen, App-Logs, Backup-Verifizierung
👉 Wir erstellen euch einen konkreten Cutover-Runbook mit allen Befehlen und Checklisten.
Weiterführende Guides
Diese Anleitungen könnten euch ebenfalls interessieren:
- AWS S3 zu Hetzner Object Storage migrieren – rclone & MinIO Client Guide
- AWS zu Hetzner Migration – Komplettübersicht – Alle AWS-Services im Überblick
- Cloud-Migration Hub – Alle Provider-Migrationen im Überblick
- Cloud-Kosten sparen: AWS EC2 & RDS – Bis zu 90% Ersparnis
- Hetzner Expertise – Unsere Hetzner-Services im Überblick
Bereit für die Migration? Bei WZ-IT übernehmen wir Analyse, Migration und Betrieb eurer Datenbank-Infrastruktur – von AWS zu kosteneffizienten, europäischen Alternativen.
Häufig gestellte Fragen
Antworten auf wichtige Fragen zu diesem Thema
Die Dauer hängt von der Datenbankgröße ab. Mit pg_dump/restore und parallelen Jobs (-j 8) sind 50-100 GB in wenigen Stunden migriert. Für größere DBs oder minimale Downtime: Logical Replication prüfen.
Nein, wenn ihr während des Dumps einen Write-Freeze macht (App Read-Only). pg_dump erstellt einen konsistenten Snapshot. Validierung über Rowcounts und Stichproben empfohlen.
Nein, Hetzner bietet kein Managed PostgreSQL wie AWS RDS. Ihr betreibt PostgreSQL selbst auf einer Cloud VM – mit voller Kontrolle über Konfiguration, Backups und Updates.
Eine Hetzner Cloud VM (z.B. CPX31 mit 8 vCPU, 16 GB RAM) kostet ca. 15€/Monat. Vergleichbare RDS-Instanzen (db.m5.large) liegen bei 150-200€/Monat – ohne Storage, I/O und Backups.
Installiert die gleiche Major-Version wie auf RDS (z.B. PostgreSQL 15). pg_dump/restore funktioniert auch bei Minor-Version-Unterschieden problemlos.

Geschrieben von
Timo Wevelsiep
Co-Founder & CEO
Co-Founder von WZ-IT. Spezialisiert auf Cloud-Infrastruktur, Open-Source-Plattformen und Managed Services für KMUs und Enterprise-Kunden weltweit.
LinkedInLassen Sie uns über Ihre Idee sprechen
Ob konkrete IT-Herausforderung oder einfach eine Idee – wir freuen uns auf den Austausch. In einem kurzen Gespräch prüfen wir gemeinsam, ob und wie Ihr Projekt zu WZ-IT passt.


Timo Wevelsiep & Robin Zins
Geschäftsführer




