Wird geladen...

Wir haben festgestellt, dass Ihre Browsersprache Chinesisch ist. Möchten Sie unsere chinesische Website besuchen? [ Schließen ]
Von: Dylan

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.

Copy PostgreSQL database

Kopieren einer PostgreSQL‑Datenbank auf demselben Server

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:

  • Superuser‑ oder Besitzerberechtigungen für die PostgreSQL‑Quelldatenbank
  • Keine aktiven Verbindungen zur Quelldatenbank (ein häufiges Problem, das unten behoben wird)
  • Zugriff auf einen PostgreSQL‑Client (psql) oder ein Datenbankverwaltungstool (pgAdmin)

Grundlegender Befehl für die Duplizierung auf demselben Server

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.

Überprüfen der kopierten Datenbank

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.

Kopieren einer PostgreSQL‑Datenbank von einem Server auf einen anderen

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:

  • pg_dump und psql sind auf dem Quellserver installiert (im Standard‑PostgreSQL‑Setup enthalten)
  • Netzwerkzugriff zwischen den Servern (der PostgreSQL‑Standardport 5432 muss geöffnet sein)
  • Superuser‑Berechtigungen sowohl auf der Quell‑ als auch auf der Ziel‑PostgreSQL‑Instanz
  • Ausreichend Speicherplatz auf dem Zielserver für die kopierte Datenbank

Methode 1: Kopieren der Datenbank durch Übertragen einer Dump‑Datei auf einen anderen Server (am besten für große Datenbanken / langsame Verbindungen)

Bei dieser Methode wird zuerst eine lokale SQL‑Dump‑Datei erstellt, anschließend übertragen und wiederhergestellt – dies vermeidet Timeouts bei großen Datensätzen.

Schritt 1: Erstellen einer Dump‑Datei der Quelldatenbank

Syntax:

pg_dump -U postgres -d sourcedb -f sourcedb.sql 

Beispiel (Dump der Datenbank dvdrental):

pg_dump -U postgres -d dvdrental -f dvdrental.sql 
  • ‑U postgres: Verwenden des Superusers postgres (durch Ihren Administratorbenutzer ersetzen)
  • ‑d sourcedb: Name der Quelldatenbank
  • ‑f sourcedb.sql: Speichern des Dumps in einer SQL‑Datei

Schritt 2: Übertragen der Dump‑Datei auf den Zielserver

Verwenden Sie SCP (Secure Copy) für Linux/macOS (Platzhalter durch Ihre Serverdaten ersetzen):

scp sourcedb.sql postgres@target_server_ip:/home/postgres/ 

Schritt 3: Erstellen einer leeren Zieldatenbank

Stellen Sie eine Verbindung zur PostgreSQL‑Instanz des Zielservers her und führen Sie aus:

CREATE DATABASE targetdb; 

Beispiel:

CREATE DATABASE dvdrental_remote; 

Schritt 4: Wiederherstellen der Dump‑Datei in der Zieldatenbank

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 
Tipp: Fügen Sie ‑O zu pg_dump hinzu (z. B. pg_dump -U postgres -O -d dvdrental -f dvdrental.sql), um Besitzerinformationen auszulassen – dies verhindert Berechtigungsfehler auf dem Ziel.

Methode 2: Direktes Pipe‑Kopieren (am besten für kleine Datenbanken / schnelle Verbindungen)

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 
  • ‑C: Erstellt automatisch die Zieldatenbank (kein manuelles CREATE DATABASE erforderlich)
  • ‑h: Angabe der IP‑Adresse des Quell‑/Zielservers
  • Pipe‑Zeichen (|): Leitet die Dump‑Ausgabe direkt an den psql‑Befehl des Ziels weiter

4. Überprüfen der serverübergreifend kopierten Datenbank

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.

PostgreSQL‑COPY‑Befehl im Vergleich zur vollständigen Datenbankkopie

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:

  • CREATE DATABASE WITH TEMPLATE: für die Duplizierung auf demselben Server
  • pg_dump/psql: für die serverübergreifende Duplizierung

Diese Werkzeuge verarbeiten die komplette Datenbankstruktur, nicht nur einzelne Tabellendaten.

Automatisieren von PostgreSQL‑Datenbankmigrationen mit i2Stream

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:

  • Datenbankduplizierung mit einem Klick: Keine pg_dump‑ oder psql‑Befehle mehr.
  • Migration nahezu ohne Ausfallzeit für laufende Produktionsdatenbanken.
  • Vollständige Replikation: Schema, Daten, Indizes, Einschränkungen und gespeicherte Prozeduren.
  • Hochgeschwindigkeits‑Synchronisation für große PostgreSQL‑Datenbanken.
  • Agentenlos, keine Leistungseinbußen auf der Quelldatenbank.
  • Integrierte Datenvalidierung zur Gewährleistung einer 100‑prozentigen Konsistenz.
  • Unterstützt sowohl vollständige als auch inkrementelle Datensynchronisation.

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.

KOSTENLOSE 60‑Tage‑Testversion
Sicherer Download

Fehlerbehebung bei häufigen Fehlern beim Kopieren von PostgreSQL‑Datenbanken

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.

1. Fehler: Die Quelldatenbank wird von anderen Benutzern verwendet

source database is being accessed by other users

Dies ist der häufigste Fehler bei der Verwendung von CREATE DATABASE WITH TEMPLATE auf demselben Server.

  • Ursache: Es bestehen noch aktive Verbindungen zur Quelldatenbank.
  • Lösung: Beenden Sie zuerst die inaktiven Verbindungen und wiederholen Sie anschließend den Kopierbefehl.

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.

2. Fehler: Berechtigung verweigert

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.

3. Fehler: Wiederherstellung auf der Zieldatenbank schlägt fehl

Ursache: Die Zieldatenbank existiert nicht oder enthält bereits Daten.

Lösung:

  • Erstellen Sie zuerst eine leere Datenbank.
  • Führen Sie keine Wiederherstellung in eine Datenbank mit vorhandenen Tabellen oder Schemas durch.

4. Fehler: Netzwerk‑Timeout beim serverübergreifenden Kopieren

Network timeout during cross-server copy

Ursache: Instabiles Netzwerk oder große Datenbankgröße.

Lösung:

  • Vermeiden Sie die direkte Pipe‑Methode.
  • Verwenden Sie zuerst pg_dump zum Erstellen einer lokalen Datei, übertragen Sie diese und führen Sie anschließend die Wiederherstellung durch.

5. Fehler: Fehlende Daten oder Tabellen nach dem Kopieren

Ursache: Unvollständiger Dump, unterbrochene Übertragung oder aktive Schreibvorgänge während des Kopiervorgangs.

Lösung:

  • Erstellen Sie die Dump‑Datei neu.
  • Stellen Sie sicher, dass die Dateiübertragung vollständig abgeschlossen ist.
  • Vermeiden Sie Schreibvorgänge auf der Quelldatenbank während des Kopiervorgangs.

Bewährte Verfahren für die Duplizierung von PostgreSQL‑Datenbanken

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

  • Für Kopien auf demselben Server: Vermeiden Sie Kopiervorgänge während der Spitzenlastzeiten (reduziert die Leistungseinbußen).
  • Für serverübergreifende Kopien: Verwenden Sie für große Datenbanken eine inkrementelle Synchronisation (über i2Stream) statt vollständiger Dumps.
  • Führen Sie keine aufwändigen Abfragen auf der Quelle während des Kopiervorgangs aus – dies verlangsamt beide Aufgaben.

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:

  • Verwenden Sie Shell‑Skripte, um Arbeitsabläufe mit pg_dump/psql zu automatisieren.
  • Nutzen Sie die Planungsfunktion von i2Stream, um Kopien außerhalb der Spitzenlastzeiten auszuführen (kein manueller Eingriff erforderlich).

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.

Zusammenfassung

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.

Häufig gestellte Fragen (FAQ)

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.

 

Keine Kurzbiografie vorhanden

Weitere verwandte Artikel

Inhaltsverzeichnis:
Bleiben Sie über die neuesten Tipps informiert
Abonnieren Sie unseren Newsletter für aktuelle Einblicke, Neuigkeiten und exklusive Inhalte. Sie können sich jederzeit abmelden.
Abonnieren
Bereit, Ihre Unternehmensdatensicherheit zu verbessern?
Starten Sie eine 60-tägige Testversion oder sehen Sie sich eine Demo an, um zu erfahren, wie Info2soft Unternehmensdaten schützt.
Bitte füllen Sie das Formular aus und senden Sie es ab – unser Kundenservice wird sich in Kürze bei Ihnen melden.
Mit dem Absenden dieses Formulars bestätige ich, dass ich die Datenschutzerklärung.
{{ isSubmitting ? 'Wird gesendet...' : 'Absenden' }}