Übersicht
Wenn Sie Ihr Schema, Ihre Daten und Metadaten aus einer Quelldatenbank in eine Zieldatenbank migrieren, möchten Sie sicherstellen, dass alle diese Informationen korrekt migriert werden. Database Migration Service bietet eine zuverlässige Möglichkeit, Datenbankobjekte (einschließlich Schema, Daten und Metadaten) von einer Datenbank in eine andere zu migrieren.
Während der Migration werden Daten und Einschränkungen separat migriert. Zuerst werden die Daten migriert und Einschränkungen wie Primärschlüssel, Fremdschlüssel und Indexe werden nach dem ersten vollständigen Dump und Laden in der Instanz neu erstellt.Alle 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 Systemdatenbanken:
- Das Informationsschema
information_schema - Alle Schemas, die mit
pgbeginnen (z. B.pg_catalog)
Weitere Informationen zu diesen Schemas finden Sie unter Bekannte Einschränkungen.
- Das Informationsschema
Schema
Benennung
Primärschlüssel
Datentyp
Ordnungsposition
Standardwert
Null-Zulässigkeit
Attribute für automatische Inkrementierung
Sekundäre Indexe
Metadaten
Gespeicherte Prozeduren
Funktionen
Trigger
Aufrufe
Einschränkungen für Fremdschlüssel
Kontinuierliche Migration
Bei kontinuierlichen Migrationen werden nur Änderungen der Datenbearbeitungssprache (Data Manipulation Language, DML) automatisch aktualisiert. Der Nutzer ist für die Verwaltung von Änderungen der Datendefinitionssprache (Data Definition Language, DDL) verantwortlich, damit die Quell- und Zieldatenbanken kompatibel bleiben. Dies kann auf zwei Arten erreicht werden:
-
Schreiben in die Quelle beenden und die DDL-Befehle sowohl in der Quelle als auch im
Ziel ausführen. Gewähren Sie dem Cloud SQL-Nutzer, der die DDL
Änderungen anwendet,
cloudsqlexternalsyncbevor die DDL-Befehle für das Ziel ausgeführt werden. Gewähren Sie den entsprechenden Cloud SQL-Nutzern diecloudsqlexternalsyncRolle, um Abfragen oder Änderungen der Daten zu ermöglichen. - Verwenden Sie den
pglogical.replicate_ddl_command, damit DDL an der Quelle und am Ziel an einem identischen Punkt ausgeführt wird. Der Nutzer, der diesen Befehl ausführt, muss denselben Nutzernamen sowohl in der Quelle als auch im Ziel haben, und Superuser oder Inhaber des migrierten Artefakts sein (z. B. Tabelle, Sequenz, Ansicht oder Datenbank).Hier sind einige Beispiele für die Verwendung des Befehls
pglogical.replicate_ddl_command.Ersetzen Sie:
[SCHEMA]durch den Namen des Tabellenschemas, das Sie verwenden möchten[TABLE_NAME]durch den Tabellennamen[NEW_NAME_FOR_TABLE]durch den neuen Namen für die Tabelle, wenn Sie den Vorgang zum Umbenennen ausführen
Einer Datenbanktabelle mit einem Primärschlüssel eine Spalte hinzufügen
select pglogical.replicate_ddl_command( 'ALTER TABLE [SCHEMA].[TABLE_NAME] add column surname varchar(20)', '{default}' );
Einer Datenbanktabelle ohne Primärschlüssel eine Spalte hinzufügen
select pglogical.replicate_ddl_command( 'ALTER TABLE [SCHEMA].[TABLE_NAME] add column surname varchar(20)', '{default_insert_only}' );
Den Namen einer Datenbanktabelle mit einem Primärschlüssel ändern
select pglogical.replicate_ddl_command( 'ALTER TABLE [SCHEMA].[TABLE_NAME] RENAME TO [NEW_NAME_FOR_TABLE]', '{default}' );
Den Namen einer Datenbanktabelle ohne Primärschlüssel ändern
select pglogical.replicate_ddl_command( 'ALTER TABLE [SCHEMA].[TABLE_NAME] RENAME TO [NEW_NAME_FOR_TABLE]', '{default_insert_only}' );
Eine Datenbanktabelle mit einem Primärschlüssel erstellen
Führen Sie folgende Befehle 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]');
Eine Datenbanktabelle ohne Primärschlüssel erstellen
Führen Sie folgende Befehle 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 nicht migriert wird
Wenn Sie einer Cloud SQL-Zielinstanz Nutzer hinzufügen möchten, rufen Sie die Instanz auf und fügen Sie Nutzer über den Tab Nutzer hinzu oder fügen Sie sie über einen PostgreSQL-Client hinzu. Weitere Informationen zum Erstellen und Verwalten von PostgreSQL-Nutzern
Database Migration Service migriert keine Erweiterungen, die von Cloud SQL nicht unterstützt werden. Das Vorhandensein dieser Erweiterungen blockiert die Migration nicht. Um jedoch einen reibungslosen Migrationsprozess zu gewährleisten, prüfen Sie, ob Ihre Objekte oder Anwendungen auf nicht unterstützte Erweiterungen verweisen. Wir empfehlen, diese Erweiterungen und Verweise vor dem Fortfahren aus der Quelldatenbank zu entfernen.
Große Objekte können nicht repliziert werden, da die logische Decodierung von PostgreSQL keine Decodierung von Änderungen an großen Objekten unterstützt. Bei Tabellen mit dem Spaltentyp
oiddie auf große Objekte verweisen, werden die Zeilen synchronisiert und neue Zeilen repliziert. Wenn Sie jedoch versuchen, auf das große Objekt in der Zieldatenbank zuzugreifen (mitlo_getlesen, mitlo_exportexportieren, oder den Katalogpg_largeobjectnach der angegebenenoidsuchen), schlägt der Vorgang mit einer Meldung fehl, dass das große Objekt nicht vorhanden ist.Bei Tabellen ohne Primärschlüssel unterstützt Database Migration Service die Migration des ersten Snapshots und der
INSERTAnweisungen während der CDC-Phase (Change Data Capture).UPDATE- undDELETE-Anweisungen sollten Sie manuell migrieren.Database Migration Service migriert keine Daten aus materialisierten Ansichten, sondern nur das Ansichtsschema. Führen Sie den folgenden Befehl aus, um die Ansichten zu füllen:
REFRESH MATERIALIZED VIEW view_name.Die
SEQUENCE-Status (z. B.last_value) in der neuen Zielinstanz können von denSEQUENCE-Status der Quelle abweichen.Benutzerdefinierte Tablespaces werden in der Cloud SQL-Zielinstanz nicht unterstützt. Alle Daten in benutzerdefinierten Tablespaces werden in den Standard-Tablespace
pg_defaultin Cloud SQL migriert.