Übertragen von PostgreSQL-Datenbanken zwischen DB-Instances - Amazon Relational Database Service

Übertragen von PostgreSQL-Datenbanken zwischen DB-Instances

Mit der Verwendung von PostgreSQL-Transportdatenbanken für Amazon RDS können Sie eine PostgreSQL-Datenbank zwischen zwei DB-Instances bewegen. Dies ist eine sehr schnelle Möglichkeit, große Datenbanken zwischen verschiedenen DB-Instances zu migrieren. Um diesen Ansatz zu verwenden, müssen Ihre DB-Instances beide die gleiche Hauptversion von PostgreSQL ausführen.

Diese Funktion erfordert, dass Sie die pg_transport-Erweiterung sowohl für die Quell- als auch die Ziel-DB-Instance installieren. Die pg_transport-Erweiterung bietet einen physischen Transportmechanismus, der die Datenbankdateien mit minimaler Verarbeitung verschiebt. Dieser Mechanismus bewegt Daten viel schneller als herkömmliche Abfragen- und Ladeprozesse mit weniger Ausfallzeiten.

Anmerkung

PostgreSQL-Transportdatenbanken sind in RDS for PostgreSQL Version 11.5 und höher und RDS for PostgreSQL Version 10.10 und höher verfügbar.

Um eine PostgreSQL-DB-Instance von einer DB-Instance von RDS for PostgreSQL zu einer anderen zu transportieren, richten Sie zuerst die Quell- und Zielinstances ein, wie in Einrichten einer DB-Instance für den Transport beschrieben. Anschließend können Sie die Datenbank mit der unter Transport einer PostgreSQL-Datenbank beschriebenen Funktion transportieren.

Was passiert beim Datenbanktransport?

Die Funktion PostgreSQL-Transportdatenbanken verwendet ein Pull-Modell, um die Datenbank aus der Quell-DB-Instance in das Ziel zu importieren. Die transport.import_from_server-Funktion erstellt die In-Transit-Datenbank auf der Ziel-DB-Instance. Die In-Transit-Datenbank ist auf der Ziel-DB-Instance für die Dauer des Transports nicht zugänglich.

Wenn der Transport beginnt, werden alle aktuellen Sitzungen auf der Quelldatenbank beendet. Alle anderen Datenbanken als die Quelldatenbank auf der Quell-DB-Instance sind vom Transport nicht betroffen.

Die Quelldatenbank wird in einen speziellen schreibgeschützten Modus versetzt. Während es sich in diesem Modus befindet, können Sie sich mit der Quelldatenbank verbinden und schreibgeschützte Abfragen durchführen. Allerdings sind schreibende Abfragen und einige andere Arten von Befehlen blockiert. Von diesen Einschränkungen ist nur die spezifische Quelldatenbank betroffen, die transportiert wird.

Während des Transports können Sie für die Ziel-DB-Instance keine Point-in-time-Wiederherstellung durchführen. Dies liegt daran, dass der Transport nicht transaktional ist und das PostgreSQL-Write-Ahead-Protokoll nicht verwendet, um Änderungen aufzuzeichnen. Wenn in der Ziel-DB-Instance das automatische Backup aktiviert ist, wird nach Abschluss des Transports automatisch ein Backup durchgeführt. Point-in-time-Wiederherstellungen sind für den Zeitraum nach dem Ende des Backups verfügbar.

Wenn der Transport fehlschlägt, versucht die pg_transport-Erweiterung, alle Änderungen an den Quell- und Ziel-DB-Instances rückgängig zu machen. Dazu gehört auch das Entfernen der teilweise transportierten Datenbank auf dem Ziel. Abhängig von der Art des Fehlers kann es vorkommen, dass die Quelldatenbank weiterhin schreibende Abfragen ablehnt. Verwenden Sie in diesem Fall den folgenden Befehl, um schreibende Abfragen zu ermöglichen.

ALTER DATABASE db-name SET default_transaction_read_only = false;

Einschränkungen für die Verwendung von PostgreSQL-Transportdatenbanken

Transportdatenbanken haben folgende Einschränkungen:

  • Lesereplikate – Sie können keine Transportdatenbanken für Lesereplikate oder übergeordnete Instances von Lesereplikaten verwenden.

  • Nicht unterstützte Spaltentypen – Sie können die reg-Datentypen nicht in Datenbanktabellen verwenden, die Sie mit dieser Methode transportieren möchten. Diese Typen hängen von den Objekt-IDs (OIDs) des Systemkatalogs ab, die sich häufig während des Transports ändern.

  • Tablespaces – Alle Quelldatenbankobjekte müssen sich im Standard-Tablespace pg_default befinden.

  • Kompatibilität – Sowohl die Quell- als auch die Ziel-DB-Instance müssen die gleiche Hauptversion von PostgreSQL ausführen.

  • Erweiterungen – Auf der Quell-DB-Instance kann nur das pg_transport installiert sein.

  • Rollen und ACLs – Die Zugriffsrechte und Besitzinformationen der Quelldatenbank werden nicht in die Zieldatenbank übertragen. Alle Datenbankobjekte werden erstellt und gehören dem lokalen Zielbenutzer des Transports.

  • Gleichzeitige Transporte – Eine einzelne DB-Instance kann bis zu 32 gleichzeitige Transporte unterstützen, einschließlich Importe und Exporte, wenn Worker-Prozesse ordnungsgemäß konfiguriert wurden.

  • Nur DB-Instances von RDS for PostgreSQL – Transportable PostgreSQL-Datenbanken werden nur auf DB-Instances von RDS for PostgreSQL unterstützt. Sie können es nicht mit lokalen Datenbanken oder Datenbanken verwenden, die auf Amazon EC2 ausgeführt werden.