Info2soft verwendet Cookies, um Ihnen ein besseres und angenehmeres Surferlebnis auf unserer Website zu ermöglichen. Datenschutzerklärung
Wird geladen...
Das Kopieren oder Duplizieren einer PostgreSQL‑Datenbank ist eine alltägliche Schlüsselaufgabe für Datenbankadministratoren, Entwickler und DevOps‑Ingenieure, die mit PostgreSQL arbeiten.
Das Kopieren oder Duplizieren einer PostgreSQL‑Datenbank ist eine Kernaufgabe für DBAs, Entwickler und DevOps‑Teams. Es ist unerlässlich für die Erstellung von Test‑/Staging‑Umgebungen, die Sicherung kritischer PostgreSQL‑Daten, die Migration auf neue Server und das Klonen von Produktionsdatenbanken für sichere Entwicklungsarbeiten.
Dieser Leitfaden beschreibt die wichtigsten Arbeitsabläufe zum Kopieren von PostgreSQL‑Datenbanken, einschließlich des Duplizierers auf demselben Server und des Kopierens über verschiedene Server hinweg. Zudem klärt er die häufige Verwechslung zwischen der vollständigen Datenbankduplizierung und dem tabellenbezogenen COPY‑Befehl von PostgreSQL.
„Copy database in PostgreSQL“ und „PostgreSQL duplicate database“ verfolgen dasselbe Ziel: die Erstellung einer exakten Kopie einer Quelldatenbank (Schema, Tabellen, Daten und Objekte) in einem neuen Ziel. PostgreSQL verfügt über native Werkzeuge für diese Aufgabe: die Anweisung CREATE DATABASE WITH TEMPLATE für Aufgaben zum Kopieren einer PostgreSQL‑Datenbank auf demselben Server sowie die Befehlszeilenwerkzeuge pg_dump/psql für serverübergreifendes Kopieren.
Das Duplizieren einer PostgreSQL‑Datenbank auf demselben Server ist die schnellste und einfachste Duplizierungsmethode unter Verwendung der nativen PostgreSQL‑Anweisung CREATE DATABASE mit einer Vorlage. Für diese Methode sind nur wenige grundlegende SQL‑Befehle erforderlich.
Voraussetzungen:
Verwenden Sie die WITH‑TEMPLATE‑Klausel in der CREATE‑DATABASE‑Anweisung, um eine exakte Kopie Ihrer Quelldatenbank zu erstellen. Dieser Befehl klont in einem Schritt das Schema, die Tabellen, die Daten und alle zugehörigen Datenbankobjekte der Quelle.
Kernsyntax:
CREATE DATABASE targetdb
WITH TEMPLATE sourcedb;
Praktisches Beispiel:
Um die Beispieldatenbank dvdrental in eine Testkopie dvdrental_test zu kopieren:
CREATE DATABASE dvdrental_test
WITH TEMPLATE dvdrental;
Die Kopierzeit hängt von der Größe der Quelldatenbank ab – kleine Datenbanken werden sofort fertiggestellt, größere benötigen einige Minuten.
Bestätigen Sie die vollständige Kopie mit zwei kurzen psql‑Befehlen (ausgeführt in Ihrem PostgreSQL‑Client):
1. Verbinden Sie sich mit der Zieldatenbank:
\c targetdb;
2. Listen Sie alle Tabellen auf, um zu prüfen, ob das Schema mit der Quelle übereinstimmt:
\dt;
Sie können zudem eine einfache SELECT‑Abfrage auf einer Beispieltabelle ausführen, um zu prüfen, ob die Daten korrekt kopiert wurden. Die Zieldatenbank ist nun eine voll funktionsfähige Kopie der Quelle.
Das serverübergreifende Duplizieren einer PostgreSQL‑Datenbank ist entscheidend für Migrationen, Cloud‑Bereitstellungen oder die Datensynchronisation zwischen lokalen und Remote‑Umgebungen. Für diese Aufgabe sind pg_dump (zum Export der Quelldatenbank) und psql (zur Wiederherstellung auf dem Ziel) die nativen, zuverlässigen Werkzeuge von PostgreSQL.
Wir stellen zwei Methoden vor: eine für große Datenbanken/langsame Netzwerke und eine für kleine Datenbanken/schnelle Verbindungen.
Voraussetzungen:
Bei dieser Methode wird zuerst eine lokale SQL‑Dump‑Datei erstellt, anschließend übertragen und wiederhergestellt – dies vermeidet Timeouts bei großen Datensätzen.
Syntax:
pg_dump -U postgres -d sourcedb -f sourcedb.sql
Beispiel (Dump der Datenbank dvdrental):
pg_dump -U postgres -d dvdrental -f dvdrental.sql
Verwenden Sie SCP (Secure Copy) für Linux/macOS (Platzhalter durch Ihre Serverdaten ersetzen):
scp sourcedb.sql postgres@target_server_ip:/home/postgres/
Stellen Sie eine Verbindung zur PostgreSQL‑Instanz des Zielservers her und führen Sie aus:
CREATE DATABASE targetdb;
Beispiel:
CREATE DATABASE dvdrental_remote;
Führen Sie auf dem Zielserver aus:
psql -U postgres -d targetdb -f sourcedb.sql
Beispiel:
psql -U postgres -d dvdrental_remote -f dvdrental.sql
Dieser einzeilige Befehl verzichtet auf eine lokale Dump‑Datei und leitet den Dump direkt an den Zielserver weiter – schneller für kleine Datenbanken mit stabilen Netzwerken.
Kernsyntax:
pg_dump -C -h source_server_ip -U postgres sourcedb | psql -h target_server_ip -U postgres targetdb
Beispiel (Kopieren von dvdrental von localhost auf einen Remote‑Server):
pg_dump -C -h 192.168.1.100 -U postgres dvdrental | psql -h 192.168.1.200 -U postgres dvdrental_remote
Bestätigen Sie auf dem Zielserver die vollständige Kopie:
1. Verbinden Sie sich mit der Zieldatenbank: \c targetdb;
\c targetdb;
2. Listen Sie Tabellen auf, um zu prüfen, ob das Schema mit der Quelle übereinstimmt:
\dt;
3. Überprüfen Sie die Datenintegrität mit einer Beispielabfrage:
SELECT COUNT(*) FROM customer;
Vergleichen Sie das Ergebnis mit der Quelldatenbank – beide müssen exakt übereinstimmen.
Ein häufiger Fehler bei neuen PostgreSQL‑Benutzern ist die Verwechslung des integrierten COPY‑Befehls mit der vollständigen Datenbankduplizierung – dies sind zwei völlig unterschiedliche Werkzeuge für unterschiedliche Aufgaben. Das Verständnis dieses Unterschieds ist entscheidend, um Zeitverlust und fehlgeschlagene Kopiervorgänge zu vermeiden.
Was macht der PostgreSQL‑COPY‑Befehl tatsächlich?
Der offizielle PostgreSQL‑COPY‑Befehl verschiebt nur Daten zwischen einer einzelnen Tabelle und einer Datei (oder Standardein‑/‑ausgabe). Er kopiert nicht das gesamte Schema, Beziehungen, Indizes oder gespeicherte Prozeduren einer Datenbank – nur die Zeilen einer einzelnen Tabelle.
Grundlegende Beispiele für den COPY‑Befehl
Exportieren von Daten aus einer einzelnen Tabelle in eine Datei:
— Kopieren von Daten aus der Tabelle „customer“ in eine CSV‑Datei
COPY customer TO '/tmp/customer_data.csv' (FORMAT csv, HEADER);
Importieren von Daten aus einer Datei in eine Tabelle:
— Importieren von CSV‑Daten in die Tabelle „customer“
COPY customer FROM '/tmp/customer_data.csv' (FORMAT csv, HEADER);
Anwendungsfälle für COPY: Export einer einzelnen Tabelle für Berichte, Massendatenimport in eine Tabelle oder Migration tabellenspezifischer Daten – niemals die vollständige Datenbankduplizierung.
Vollständige Datenbankkopie:
Dagegen repliziert die vollständige Datenbankkopie (Schwerpunkt dieses Leitfadens) eine gesamte PostgreSQL‑Datenbank – einschließlich aller Tabellen, Schemas, Indizes und Objekte. Die hierfür verwendeten Werkzeuge sind:
Diese Werkzeuge verarbeiten die komplette Datenbankstruktur, nicht nur einzelne Tabellendaten.
Manuelle CLI‑basierte PostgreSQL‑Kopien und‑Migrationen eignen sich für einfache Aufgaben, sind aber langsam, fehleranfällig und riskant für Produktionsdatenbanken. i2Stream ist ein professionelles Replikations‑ und Migrationswerkzeug zur Vereinfachung von PostgreSQL‑Datenbankmigrationen und Arbeitsabläufen zum Kopieren von PostgreSQL‑Datenbanken.
Es unterstützt sowohl Szenarien zum Kopieren von PostgreSQL‑Datenbanken auf demselben Server als auch serverübergreifende Szenarien mit Unternehmensstabilität und nahezu ohne Ausfallzeit.
Wichtige Vorteile für PostgreSQL‑Benutzer:
i2Stream wandelt komplexe manuelle Datenbankkopien in einen einfachen, zuverlässigen Arbeitsablauf um. Es ist die ideale Lösung für DBAs, DevOps‑ und Entwicklungsteams, die Aufgaben zum Duplizieren von PostgreSQL‑Datenbanken in großem Maßstab bearbeiten.
Sie können auf die Schaltfläche unten klicken, um eine kostenlose Testversion zu erhalten.
Auch bei korrekten Befehlen können beim Kopieren einer PostgreSQL‑Datenbank Fehler auftreten. Im Folgenden sind die häufigsten Probleme und schnelle Lösungen aufgeführt.
Dies ist der häufigste Fehler bei der Verwendung von CREATE DATABASE WITH TEMPLATE auf demselben Server.
Beheben Sie den Fehler, indem Sie zuerst die aktiven Verbindungen auflisten und diese anschließend beenden.
Schritt 1: Auflisten der aktiven Verbindungen zur Quelldatenbank
Syntax:
SELECT pid, usename, client_addr
FROM pg_stat_activity
WHERE datname = 'sourcedb';
Schritt 2: Beenden der aktiven Verbindungen
Syntax:
SELECT pg_terminate_backend (pid)
FROM pg_stat_activity
WHERE datname = 'sourcedb';
Führen Sie den ursprünglichen Befehl CREATE DATABASE WITH TEMPLATE erneut aus – er wird nun erfolgreich ausgeführt.
Dieser Fehler kann während pg_dump, psql oder der Datenbankerstellung auftreten.
Ursache: Ihrem Benutzer fehlen Superuser‑ oder Datenbankbesitzerrechte.
Lösung: Führen Sie die Befehle mit einem Superuser aus (z. B. postgres) oder erteilen Sie die erforderlichen Berechtigungen.
Ursache: Die Zieldatenbank existiert nicht oder enthält bereits Daten.
Lösung:
Ursache: Instabiles Netzwerk oder große Datenbankgröße.
Lösung:
Ursache: Unvollständiger Dump, unterbrochene Übertragung oder aktive Schreibvorgänge während des Kopiervorgangs.
Lösung:
Die Einhaltung bewährter Verfahren stellt sicher, dass Ihre Aufgaben zum Kopieren und Duplizieren von PostgreSQL‑Datenbanken schnell, sicher und fehlerfrei ablaufen.
1. Immer vor dem Kopieren sichern
Kopieren Sie niemals eine Datenbank, ohne zuvor die Quelle zu sichern. Erstellen Sie eine PostgreSQL‑Sicherung, um sich vor Datenverlusten bei einem fehlgeschlagenen Kopiervorgang zu schützen.
2. Last der Quelldatenbank minimieren
3. Ordnungsgemäßer Umgang mit Berechtigungen
Verwenden Sie das Flag ‑O bei pg_dump, um Besitzerinformationen auszulassen (verhindert Berechtigungsfehler auf dem Ziel).
pg_dump -U postgres -O -d sourcedb -f sourcedb.sql
Erteilen Sie Benutzern, die Kopieraufgaben ausführen, nur die erforderlichen Berechtigungen (vermeiden Sie die übermäßige Verwendung von Superuser‑Zugriffen).
4. Optimierung für große Datenbanken
Komprimieren Sie Dump‑Dateien, um Speicherplatz zu sparen und Übertragungen zu beschleunigen:
pg_dump -U postgres -d sourcedb | gzip > sourcedb.sql.gz
Verwenden Sie i2Stream für große Datenbanken – dessen Hochgeschwindigkeits‑Synchronisation vermeidet Timeouts und reduziert Ausfallzeiten.
5. Sofortiges Überprüfen der kopierten Datenbank
Überprüfen Sie nach dem Kopiervorgang stets die erstellte Kopie:
1. Prüfen Sie die Tabellenzählungen (Quelle und Ziel müssen übereinstimmen).
2. Führen Sie Beispiel‑SELECT‑Abfragen aus, um die Datenintegrität zu bestätigen.
3. Überprüfen Sie, ob Indizes, Einschränkungen und gespeicherte Prozeduren wie erwartet funktionieren.
6. Automatisieren von wiederkehrenden Aufgaben
Für häufige Aufgaben zum Kopieren von PostgreSQL‑Datenbanken auf demselben Server oder serverübergreifend:
7. Bereinigen temporärer Dateien
Löschen Sie nach serverübergreifenden Kopien die Dump‑Dateien sowohl auf Quell‑ als auch auf Zielserver, um Speicherplatz freizugeben – es sei denn, Sie benötigen diese für Sicherungen.
Diese Verfahren reduzieren Fehler, schützen Daten und machen Ihre Arbeitsabläufe zur Duplizierung von PostgreSQL‑Datenbanken auch in großem Maßstab zuverlässig.
Das Kopieren oder Duplizieren einer PostgreSQL‑Datenbank muss nicht komplex sein. Unabhängig davon, ob Sie eine PostgreSQL‑Datenbank auf denselben Server kopieren oder eine serverübergreifende Migration durchführen möchten: Die nativen PostgreSQL‑Werkzeuge CREATE DATABASE WITH TEMPLATE, pg_dump und psql erledigen die Arbeit für einfache Aufgaben.
Für Produktionsumgebungen, große Datenbanken oder häufige Duplizierungsaufgaben reichen manuelle CLI‑Methoden nicht aus. i2Stream automatisiert den gesamten Prozess und bietet nahezu keine Ausfallzeit, Hochgeschwindigkeits‑Synchronisation sowie integrierte Validierung.
F1: Kann ich eine PostgreSQL‑Datenbank kopieren, während sie verwendet wird?
Dies wird nicht empfohlen. Aktive Schreibvorgänge auf der Quelldatenbank während des Kopiervorgangs können Datenbeschädigungen oder fehlende Daten verursachen. Bei Kopien auf demselben Server beenden Sie zuerst die aktiven Verbindungen (siehe Abschnitt 6.1). Für Produktionsdatenbanken verwenden Sie die nahezu ausfallzeitfreie Migration von i2Stream, um Störungen zu vermeiden.
F2: Wie kopiere ich eine PostgreSQL‑Datenbank mit allen Benutzern und Berechtigungen?
Verwenden Sie pg_dumpall anstelle von pg_dump. Dieses Werkzeug exportiert alle Datenbanken, Rollen und Berechtigungen. Für die Benutzer einer einzelnen Datenbank fügen Sie das Flag ‑x bei pg_dump hinzu, um Berechtigungen einzuschließen, oder verwenden Sie i2Stream zur automatischen Replikation aller Benutzerberechtigungen.
F3: Funktioniert der PostgreSQL‑COPY‑Befehl für die vollständige Datenbankkopie?
Nein. Der COPY‑Befehl verarbeitet nur Daten einzelner Tabellen (Export/Import zwischen Tabelle und Datei). Er kann keine Schemas, Indizes oder gesamte Datenbanken kopieren – verwenden Sie für vollständige PostgreSQL‑Datenbankkopien CREATE DATABASE WITH TEMPLATE oder pg_dump/psql.
F4: Ist i2Stream besser als manuelles pg_dump/psql bei serverübergreifenden Migrationen?
Ja, für die meisten Unternehmensanwendungsfälle. i2Stream automatisiert den gesamten Prozess (keine manuellen Befehle), unterstützt inkrementelle Synchronisation (schneller bei großen Datenbanken), gewährleistet nahezu keine Ausfallzeit und verfügt über eine integrierte Datenvalidierung – alles Merkmale, die bei manuellen Methoden fehlen. Manuelle Befehle eignen sich für kleine, einfache Migrationen.
F5: Wie kopiere ich eine PostgreSQL‑Datenbank unter Windows?
Verwenden Sie dieselben CLI‑Befehle wie unter Linux/macOS. Öffnen Sie PowerShell oder die Eingabeaufforderung, navigieren Sie zum PostgreSQL‑Bin‑Verzeichnis (z. B. C:\Program Files\PostgreSQL\15\bin) und führen Sie anschließend die Befehle pg_dump und psql aus.
F6: Warum fehlen Tabellen oder Daten in meiner kopierten Datenbank?
Häufige Ursachen sind unterbrochene Dumps/Übertragungen, aktive Schreibvorgänge während des Kopiervorgangs oder unvollständige Dump‑Befehle. Lösungen: Erstellen Sie die Dump‑Datei neu, stellen Sie sicher, dass die Übertragung abgeschlossen wird, vermeiden Sie Schreibvorgänge auf der Quelle während des Kopiervorgangs und überprüfen Sie das Kopierergebnis sofort.