Zuverlässigkeit der Migration

Wenn Sie Schema, Daten und Metadaten von einer Quelldatenbank zu einer Zieldatenbank migrieren, möchten Sie sicherstellen, dass alle Informationen korrekt migriert werden. Database Migration Service bietet einen zuverlässigen Mechanismus zum Migrieren von Datenbankobjekten (einschließlich Schema, Daten und Metadaten) von einer PostgreSQL-Datenbank zu einer anderen.

Während des Migrationsprozesses werden Daten und Einschränkungen in strukturierten Phasen migriert. Die Daten werden zuerst während des ersten Snapshot-Ladevorgangs migriert. Einschränkungen wie Primärschlüssel, Fremdschlüssel und Indexe werden nach Abschluss des ersten Ladevorgangs auf der Zielinstanz neu erstellt.

Die folgenden Daten-, Schema- und Metadatenkomponenten werden im Rahmen der Datenbankmigration migriert:

Daten

  • Alle Tabellen und Schemas aus Datenbanken, die für die Migration ausgewählt wurden, mit Ausnahme der folgenden Systemschemas:

    • Das Informationsschema (information_schema)
    • Alle Schemas, die mit pg_ beginnen (z. B. pg_catalog, pg_toast)

    Weitere Informationen zu diesen Systemschemas finden Sie unter Bekannte Einschränkungen.

    Sie können während einer laufenden Migration Datenbanken zu einem Migrationsjob hinzufügen oder daraus entfernen. Wenn Sie eine Datenbank entfernen, wird die Replikation für diese Datenbank beendet, ohne dass die bereits migrierte Datenbank auf der Zielinstanz gelöscht wird. Weitere Informationen finden Sie unter Migrationsjob bearbeiten.

Schema

  • Objektbenennung

  • Primärschlüssel

  • Datentypen

  • Ordinale Spaltenpositionen

  • Standardwerte

  • Null-Zulässigkeit

  • Identitäts- und Serienattribute

  • Sekundäre Indexe

Metadaten

  • Gespeicherte Prozeduren

  • Funktionen

  • Trigger

  • Aufrufe

  • Fremdschlüsselbeschränkungen

Kontinuierliche Migration

DML-Änderungen (Datenbearbeitungssprache) wie INSERT-, UPDATE- und DELETE-Vorgänge für Tabellen mit einem Primärschlüssel oder einer Replikatidentität werden bei kontinuierlichen Migrationen automatisch repliziert.

Wenn während des Migrationsprozesses Änderungen an der Datendefinitionssprache (DDL) in Ihrer Quelldatenbank vorgenommen werden, müssen Sie Ihre Zielinstanz aktualisieren, damit Ihre Datenbanken kompatibel bleiben. Sie können die DDL-Änderungen auf folgende Weise vornehmen:

  1. Manuelle DDL-Ausführung: Beenden Sie Schreibvorgänge in der Quelldatenbank, führen Sie die DDL-Befehle in der Quelldatenbank aus und führen Sie die entsprechenden DDL-Befehle in der Zieldatenbank aus. Bevor Sie DDL-Befehle auf dem Ziel ausführen, weisen Sie dem Cloud SQL-Nutzer, der die Änderungen anwendet, die Rolle cloudsqlexternalsync zu.

  2. Replizierte DDL-Befehle mit pglogical: Sie können pglogical.replicate_ddl_command verwenden, um DDL sowohl in der Quell- als auch in der Zieldatenbank an einem konsistenten Punkt im Replikationsstream auszuführen. Der Nutzer, der diesen Befehl ausführt, muss sowohl auf der Quell- als auch auf der Zielinstanz die entsprechenden Anmeldedaten haben und ein Superuser oder der Inhaber des geänderten Objekts sein.

Die folgenden Tabs enthalten SQL-Beispielbefehle für gängige DDL-Vorgänge mit pglogical.replicate_ddl_command:

Tabellen mit Primärschlüsseln

Spalte zu einer Tabelle mit einem Primärschlüssel hinzufügen

SELECT pglogical.replicate_ddl_command(
  'ALTER TABLE [SCHEMA].[TABLE_NAME] ADD COLUMN surname varchar(20)',
  '{default}'
);

Name einer Tabelle mit einem Primärschlüssel ändern

SELECT pglogical.replicate_ddl_command(
  'ALTER TABLE [SCHEMA].[TABLE_NAME] RENAME TO [NEW_NAME_FOR_TABLE]',
  '{default}'
);

Tabelle mit einem Primärschlüssel erstellen

Führen Sie die folgenden Befehle in der Quelldatenbank aus:

SELECT pglogical.replicate_ddl_command(
  command := 'CREATE TABLE [SCHEMA].[TABLE_NAME] (id INTEGER PRIMARY KEY, name VARCHAR);',
  replication_sets := ARRAY['default']
);
SELECT pglogical.replication_set_add_table('default', '[SCHEMA].[TABLE_NAME]');

Tabellen ohne Primärschlüssel

Spalte zu einer Tabelle ohne Primärschlüssel hinzufügen

SELECT pglogical.replicate_ddl_command(
  'ALTER TABLE [SCHEMA].[TABLE_NAME] ADD COLUMN surname varchar(20)',
  '{default_insert_only}'
);

Name einer Tabelle ohne Primärschlüssel ändern

SELECT pglogical.replicate_ddl_command(
  'ALTER TABLE [SCHEMA].[TABLE_NAME] RENAME TO [NEW_NAME_FOR_TABLE]',
  '{default_insert_only}'
);

Tabelle ohne Primärschlüssel erstellen

Führen Sie die folgenden Befehle in der Quelldatenbank aus:

SELECT pglogical.replicate_ddl_command(
  command := 'CREATE TABLE [SCHEMA].[TABLE_NAME] (id INTEGER PRIMARY KEY, name VARCHAR);',
  replication_sets := ARRAY['default_insert_only']
);
SELECT pglogical.replication_set_add_table('default_insert_only', '[SCHEMA].[TABLE_NAME]');

Was wird nicht migriert?

  • Nutzer und Berechtigungen: Anmeldedaten und Rollen von Nutzern werden nicht migriert. Wenn Sie Nutzer auf der Zielinstanz konfigurieren möchten, verwenden Sie den Tab Nutzer in der Google Cloud Console oder verwalten Sie sie mit einem SQL-Client. Weitere Informationen finden Sie in der Cloud SQL-Dokumentation unter Nutzer erstellen und verwalten.

  • Nicht unterstützte Erweiterungen: Database Migration Service migriert keine Erweiterungen, die von Cloud SQL nicht unterstützt werden. Das Vorhandensein dieser Erweiterungen blockiert den Migrationsjob nicht, aber bei Anwendungen, die auf nicht unterstützte Erweiterungen verweisen, können Fehler auftreten. Eine Liste der unterstützten Erweiterungen finden Sie in der Cloud SQL-Dokumentation unter PostgreSQL-Erweiterungen.

  • Große Objekte: Große PostgreSQL-Objekte (Datentyp oid, der auf pg_largeobject verweist) werden nicht durch logische Decodierung repliziert.

  • Tabellen ohne Primärschlüssel: Database Migration Service migriert den ersten Snapshot und repliziert INSERT-Anweisungen während der CDC-Phase. Für UPDATE- und DELETE-Anweisungen:

    • Standardmigrationen: Bei Standardmigrationen müssen Ihre Tabellen Primärschlüssel haben, um UPDATE- und DELETE-Anweisungen zu replizieren.

    • Schnellstart-Migrationen: Bei Schnellstart-Migrationen sind keine Primärschlüssel erforderlich, um UPDATE- und DELETE-Vorgänge zu replizieren, wenn Sie die Replikatidentität auf INDEX oder FULL festlegen. Durch die Konfiguration von REPLICA IDENTITY FULL erhöht sich das WAL-Volumen (Write-Ahead Log) und der Ressourcenaufwand. Es wird empfohlen, nach Möglichkeit einen Primärschlüssel hinzuzufügen. Weitere Informationen finden Sie in der PostgreSQL-Dokumentation zur Replikatidentität und in der Kurzanleitung für Migrationen.

  • Materialisierte Ansichten: Database Migration Service migriert Definitionen materialisierter Ansichten, aber nicht die zugrunde liegenden im Cache gespeicherten Daten. Führen Sie nach der Migration REFRESH MATERIALIZED VIEW view_name aus, um materialisierte Ansichten am Ziel zu füllen.

  • Sequenzstatus: Die aktuellen Werte von Sequenzen (z. B. last_value) auf der Zielinstanz können sich während der laufenden CDC von der Quelle unterscheiden. Sequenzwerte werden während des letzten Hochstufungsschritts synchronisiert.

  • Benutzerdefinierte Tablespaces: Cloud SQL unterstützt keine benutzerdefinierten Tablespaces. In benutzerdefinierten Tablespaces definierte Objekte werden in Cloud SQL automatisch dem Standard-Tablespace pg_default zugeordnet.

Nächste Schritte