Ü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. Der 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. 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 aus allen Datenbanken und Schemas, mit Ausnahme der folgenden Schemas:
- 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:
-
Schreibvorgänge in die Quelle beenden und die DDL-Befehle in der Quelle und dem 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 in der Quelle und 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
Der 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 Ä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_largeobjectfür die angegebeneoidprüfen), schlägt der Vorgang mit einer Meldung fehl, dass das große Objekt nicht vorhanden ist.Bei Tabellen ohne Primärschlüssel unterstützt der Database Migration Service die Migration des ersten Snapshots und der
INSERTAnweisungen während der CDC-Phase (Change Data Capture). Sie solltenUPDATE- undDELETE-Anweisungen manuell migrieren.Der 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) im neuen Ziel 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 Cloud SQL in den Standard-Tablespace
pg_defaultmigriert.