PostgreSQL nach Docker replizieren
PowerShell-Skript, das Datenbanken von einem entfernten PostgreSQL-Server in einem Durchgang in einen lokalen Docker-Container kopiert.
KI-generiert- Tools
Warum ich das Skript gebaut habe
Wer an einer Anwendung arbeitet, will oft mit echten Daten testen, ohne den Server anzufassen, auf dem sie liegen. Der Weg dorthin war jedes Mal derselbe: pg_dump mit den richtigen Parametern zusammensuchen, einen Postgres-Container starten, Datenbanken anlegen, Dumps einspielen. Und das für jede Datenbank einzeln. Kein schwieriger Ablauf, aber einer, bei dem man jedes Mal wieder etwas nachschlagen muss.
Also habe ich die Schritte in ein Skript gepackt. Es fragt ab, was es braucht, und erledigt den Rest selbst.
Was es macht
- Es verbindet sich mit dem Quellserver und listet alle Datenbanken auf. Du wählst einzelne aus oder nimmst alle.
- Jede Datenbank wird mit pg_dump als SQL-Datei in einen Ordner mit Zeitstempel gesichert. So bleibt nebenbei ein Backup liegen.
- Es startet einen PostgreSQL-Container in Docker, auf Wunsch mit einer bestimmten Postgres-Version und einem lokalen Ordner, damit die Daten einen Neustart überleben.
- Dort spielt es die Dumps ein. Statt Docker kann das Ziel auch ein anderer PostgreSQL-Host sein.
Stolpersteine, die es abfängt
- Keine lokalen Client-Tools nötig: Sind psql und pg_dump nicht installiert, nimmt das Skript sie aus dem Postgres-Image in Docker.
- Umlaute: Der Export läuft immer in UTF-8, damit ä, ö und ü unterwegs nicht kaputtgehen.
- Reservierte Namen: Datenbanken wie
authorizationwerden korrekt gequotet und lassen sich trotzdem anlegen. - Postgres 18 und neuer: Ab Version 18 liegt das Datenverzeichnis im offiziellen Image an einem anderen Ort. Das Skript erkennt das und bindet den richtigen Pfad ein, sonst würden die Daten stillschweigend nicht gespeichert.
- Bestehende Container: Gibt es den Container schon, kannst du ihn ersetzen oder weiterverwenden.
Ausprobieren
Das Skript ist Open Source (MIT) und läuft unter Windows mit PowerShell und Docker Desktop. .\copy-psql-databases.ps1 starten, die Fragen beantworten, fertig.