Best Practices zum Importieren und Exportieren von Daten

Beachten Sie beim Importieren und Exportieren von Daten in AlloyDB for PostgreSQL die folgenden Best Practices:

  • Verwenden Sie keine Cloud Storage-Buckets mit der Funktion Anforderer bezahlt für Importe oder Exporte.
  • Beim Erstellen einer SQL-Dumpdatei die korrekten Flags verwenden
  • Daten komprimieren, um Kosten zu sparen.
  • Lange andauernde Import- und Exportvorgänge lassen sich reduzieren, indem Sie Daten in Batches verarbeiten.
  • Prüfen Sie die importierte Datenbank nach dem Import.

Keine Cloud Storage-Buckets "Anforderer bezahlt" verwenden

Sie können keinen Cloud Storage-Bucket verwenden, für den „Anforderer bezahlt“ für Importe in oder Exporte aus AlloyDB aktiviert ist. AlloyDB verwendet ein von Google verwaltetes Dienstkonto, den Dienst-Agent, für Importe und Exporte. Dieser Agent hat in der Regel nicht den Kontext oder die Konfiguration, um dem Projekt des Anforderers den Datenzugriff in Rechnung zu stellen. Daher schlagen Vorgänge fehl, bei denen Requester Pays-Buckets verwendet werden.

Beim Erstellen einer SQL-Dumpdatei die korrekten Flags verwenden

Wenn Sie beim Exportieren von Daten in eine SQL-Dumpdatei nicht die richtigen Flags und Optionen verwenden, kann Ihr Import fehlschlagen. Informationen zum Exportieren von Daten für den Import in AlloyDB finden Sie unter DMP-Datei exportieren und SQL-Datei exportieren.

Daten komprimieren, um Kosten zu sparen

AlloyDB unterstützt das Importieren und Exportieren komprimierter .gz-Dateien aus Cloud Storage. Durch die Komprimierung können Sie insbesondere beim Exportieren großer Datenmengen viel Speicherplatz in Cloud Storage und somit Speicherkosten einsparen. Wenn Sie eine SQL-Dumpdatei oder eine CSV-Datei mit der AlloyDB API exportieren, verwenden Sie im Ziel-URI die Dateiendung .gz, um die Daten zu komprimieren. Wenn Sie eine Datei mit der Erweiterung .gz importieren, wird sie automatisch dekomprimiert.

Lange andauernde Import- und Exportvorgänge reduzieren

Je nach Größe Ihrer Daten können Importe in und Exporte aus AlloyDB lange dauern. Wenn ein Vorgang zu lange dauert, kann er andere Vorgänge blockieren.

Verringern Sie den Zeitaufwand für die Durchführung der einzelnen Vorgänge, indem Sie kleinere Datenbatches verwenden. Sie können auch das pg_dump-Tool verwenden, um einen manuellen Export von einem Client durchzuführen, der mit einer Lesepoolinstanz verbunden ist.

Importierte Datenbank prüfen

Stellen Sie nach Abschluss eines Importvorgangs mit psql oder einem anderen Client eine Verbindung zu Ihrer Datenbank her und führen Sie die entsprechenden Befehle aus, um sicherzustellen, dass der Inhalt korrekt ist, z. B. durch Auflisten von Tabellen oder Abfragen von Zeilenanzahlen.

Exportvorgänge automatisieren

Obwohl AlloyDB keine integrierte Methode zum Automatisieren von Exporten bietet, können Sie ein Automatisierungstool mit anderenGoogle Cloud -Komponenten wie Cloud Scheduler, Pub/Sub und Cloud Run-Funktionen erstellen.

Fehlerbehebung

In diesem Abschnitt finden Sie Vorschläge zur Behebung von Problemen, die bei Import- und Exportvorgängen auftreten können.

Importvorgänge

Problem Beschreibung Empfohlene Fehlerbehebung
ERROR: permission denied for schema public Wenn Sie die Zieldatenbank aus template0 erstellen, kann der Import von Daten bei PostgreSQL 15 und höher aufgrund von Schemaberechtigungen fehlschlagen.

Verwenden Sie den folgenden Befehl, um dem Nutzer, der Daten importiert, Berechtigungen für das Schema public zu erteilen:

        GRANT ALL ON SCHEMA public TO my_import_user;
        
Der Importvorgang dauert zu lange. Zu viele aktive Verbindungen können Importvorgänge beeinträchtigen.

Geben Sie Folgendes ein:

  • Schließen Sie nicht verwendete Verbindungen.
  • Prüfen Sie die CPU- und Arbeitsspeichernutzung Ihrer Instanz, um sicherzustellen, dass genügend Ressourcen verfügbar sind.
  • Um maximale Ressourcen für den Import zu gewährleisten, starten Sie die Instanz neu, bevor Sie den Vorgang beginnen. Dadurch werden alle Verbindungen geschlossen und alle Tasks beendet, die möglicherweise Ressourcen verbrauchen.
Ein Importvorgang schlägt fehl, weil ein oder mehrere Nutzer, auf die in der Dumpdatei verwiesen wird, nicht vorhanden sind. Vor dem Importieren einer Dumpdatei müssen alle Datenbanknutzer, die Inhaber von Objekten sind oder Berechtigungen für Objekte in der Dumpdatenbank erhalten haben, in der Zieldatenbank vorhanden sein. Wenn sie nicht vorhanden sind, kann der Importvorgang die Objekte nicht mit den ursprünglichen Eigentumsrechten oder Berechtigungen neu erstellen. Erstellen Sie die erforderlichen Datenbanknutzer vor dem Import.
GRANT stderr: ERROR: must be member of role ROLE_NAME Dieser Fehler kann auftreten, wenn Sie eine SQL-Dumpdatei importieren, die Objekte enthält, die ROLE_NAME gehören, oder Berechtigungen, die ROLE_NAME erteilt wurden, der Datenbanknutzer, der den Import ausführt, aber kein Mitglied von ROLE_NAME ist. Um dieses Problem zu beheben, müssen Sie dafür sorgen, dass die Rolle ROLE_NAME in der Zieldatenbank vorhanden ist, und dem Nutzer, der den Import ausführt, die Mitgliedschaft in ROLE_NAME vor dem Import gewähren.

Exportvorgänge

Problem Beschreibung Empfohlene Fehlerbehebung
HTTP Error 403: The service account does not have the required permissions for the bucket. Das AlloyDB-Dienstkonto hat nicht die erforderlichen Berechtigungen für den Ziel-Bucket. Prüfen Sie, ob der Ziel-Cloud Storage-Bucket vorhanden ist und ob dem AlloyDB-Dienstkonto die Rollen roles/storage.objectAdmin oder roles/storage.objectCreator zugewiesen sind. Mit diesen Rollen kann in den Bucket geschrieben werden. Weitere Informationen finden Sie unter IAM-Rollen (Identity and Access Management) für Cloud Storage.
Der CSV-Export hat funktioniert, der SQL-Export jedoch nicht. Die Formate CSV und SQL werden unterschiedlich exportiert. Im SQL-Format werden das Datenbankschema und die Daten exportiert, was in der Regel länger dauert. Im CSV-Format werden nur die Daten exportiert, die sich aus einer von Ihnen angegebenen SELECT-Anfrage ergeben. Wenn ein SQL-Export fehlschlägt oder zu langsam ist, können Sie einzelne Tabellen als CSV-Datei exportieren.
Export dauert zu lange. Wenn ein Export in Ihrer primären Instanz zu lange dauert, ist er möglicherweise zu groß. Exportieren Sie Daten in kleineren Batches. Exportieren Sie beispielsweise Tabellen einzeln, anstatt eine gesamte Datenbank in einem Vorgang zu exportieren. Sie können auch das pg_dump-Tool verwenden, um einen manuellen Export aus einem Client durchzuführen, der mit einer Lesepool-Instanz verbunden ist.
Create Extension-Fehler im pg_restore-Log oder Import schlägt fehl. Die Dumpdatei enthält Verweise auf eine PostgreSQL-Erweiterung, die von AlloyDB nicht unterstützt wird oder die nicht in Ihrem Cluster installiert ist. Wenn Sie die Verweise entfernen möchten, bearbeiten Sie die Dumpdatei oder installieren Sie die Erweiterung in Ihrem Cluster, sofern AlloyDB sie unterstützt.
Fehler beim Verwenden von pg_dumpall. Für das pg_dumpall-Dienstprogramm mit Flags wie --globals-only sind möglicherweise Berechtigungen erforderlich, die in AlloyDB nicht verfügbar sind.

Wenn Sie globale Objekte wie Nutzer und Rollen ohne Passwörter exportieren möchten, verwenden Sie den folgenden Befehl, um das Flag --no-role-passwords einzufügen:

        pg_dumpall --globals-only --no-role-passwords
        
Beim Exportvorgang tritt eine Zeitüberschreitung auf oder Sie sehen Connection reset by peer. Wenn Cloud Storage innerhalb eines bestimmten Zeitraums keine Daten empfängt, kann die Verbindung zurückgesetzt werden. Das kann passieren, wenn die Ausführung der ersten Datenbankabfragen, die für den Export erforderlich sind, zu lange dauert. Wenn das passiert, versuchen Sie, einen manuellen Export mit dem pg_dump-Tool von einem Client aus durchzuführen, der mit einer Lesepool-Instanz verbunden ist.

Allgemeine Probleme

Problem Beschreibung Empfohlene Fehlerbehebung
HTTP Error 409: Operation failed because another operation was already in progress. Das System lässt jeweils nur einen API-basierten Import- oder Exportvorgang zu. Senden Sie Ihre Anfrage, nachdem der aktuelle Vorgang abgeschlossen ist.

Nächste Schritte