Übersicht
Wenn Sie Ihr Schema, Ihre Daten und Ihre Metadaten aus einer Quelldatenbank in eine Zieldatenbank migrieren, sollten Sie darauf achten, 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 des Migrationsprozesses 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 anfänglichen vollständigen Dump und Laden in der Instanz neu erstellt.Im Rahmen der Datenbankmigration werden alle folgenden Daten-, Schema- und Metadatenkomponenten migriert:
Daten
Alle Tabellen aus allen Datenbanken und Schemas, mit Ausnahme der folgenden Schemas:
- Das Informationsschema
information_schema
- Alle Schemas, die mit
pg
beginnen (z. B.pg_catalog
)
Weitere Informationen zu diesen Schemas finden Sie unter Bekannte Einschränkungen.
- Das Informationsschema
Schema
Benennung
Primärschlüssel
Datentyp
Ordinale Position
Standardwert
Null-Zulässigkeit
Attribute mit automatischer Inkrementenfolge
Sekundäre Indexe
Metadaten
Gespeicherte Prozeduren
Funktionen
Trigger
Aufrufe
Einschränkungen für Fremdschlüssel
Kontinuierliche Migration
Bei kontinuierlichen Migrationen werden nur DML-Änderungen (Data Manipulation Language) automatisch aktualisiert. Die Verwaltung von Änderungen an der Datendefinitionssprache (DDL), damit die Quell- und Zieldatenbanken kompatibel bleiben, liegt in der Verantwortung des Nutzers. Dies kann auf zwei Arten erfolgen:
-
Beenden Sie Schreibvorgänge in die Quelle und führen Sie die DDL-Befehle in der Quelle und dem Ziel aus. Gewähren Sie dem Cloud SQL-Nutzer, der die DDL-Änderungen anwendet, die Rolle
cloudsqlexternalsync
, bevor die DDL-Befehle für das Ziel ausgeführt werden. Gewähren Sie den entsprechenden Cloud SQL-Nutzern die Rollecloudsqlexternalsync
, um Abfragen oder Änderungen der Daten zu ermöglichen. - Verwenden Sie die
pglogical.replicate_ddl_command
, damit DDL an der Quelle und am Ziel an einem konsistenten Punkt ausgeführt werden kann. Der Nutzer, der diesen Befehl ausführt, muss sowohl an der Quelle als auch am Ziel denselben Nutzernamen haben und Superuser oder Inhaber des zu migrierenden Artefakts sein (z. B. der Tabelle, Sequenz, Ansicht oder Datenbank).Hier einige Beispiele für die Verwendung von
pglogical.replicate_ddl_command
.Ersetzen Sie:
[SCHEMA]
durch den Namen des zu verwendenden Tabellenschemas[TABLE_NAME]
durch den Tabellennamen[NEW_NAME_FOR_TABLE]
durch den neuen Namen der Tabelle beim Umbenennen
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}' );
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}' );
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}' );
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}' );
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]');
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-Ziellininstanz Nutzer hinzufügen möchten, rufen Sie die Instanz auf und fügen Sie Nutzer über den Tab Nutzer oder ü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. Die Migration wird durch diese Erweiterungen nicht blockiert. Für einen reibungslosen Migrationsprozess sollten Sie jedoch prüfen, ob Ihre Objekte oder Anwendungen keine nicht unterstützten Erweiterungen enthalten. Wir empfehlen, diese Erweiterungen und Verweise aus Ihrer Quelldatenbank zu entfernen, bevor Sie fortfahren.
Große Objekte können nicht repliziert werden, da die logische Decodierungsfunktion von PostgreSQL keine Decodierung von Änderungen an großen Objekten unterstützt. Bei Tabellen mit dem Spaltentyp
oid
, der auf große Objekte verweist, werden die Zeilen synchronisiert und neue Zeilen repliziert. Beim Zugriff auf das Large Object in der Zieldatenbank (Lesen mitlo_get
, Exportieren mitlo_export
oder Prüfen des Katalogspg_largeobject
auf die angegebeneoid
) wird jedoch die Fehlermeldung angezeigt, dass das Large Object nicht vorhanden ist.Bei Tabellen ohne Primärschlüssel unterstützt Database Migration Service die Migration des ersten Snapshots und der
INSERT
-Anweisungen 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 Daten in die Ansichten einzufügen:
REFRESH MATERIALIZED VIEW view_name
.Die
SEQUENCE
-Status (z. B.last_value
) des neuen Ziels können von denSEQUENCE
-Status der Quelle abweichen.Benutzerdefinierte Tablespaces werden in der Ziel-Cloud SQL-Instanz nicht unterstützt. Alle Daten in benutzerdefinierten Tablespaces werden in Cloud SQL in den Standard-Tablespace
pg_default
migriert.