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.
- Das Informationsschema (
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:
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
cloudsqlexternalsynczu.Replizierte DDL-Befehle mit
pglogical: Sie könnenpglogical.replicate_ddl_commandverwenden, 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 aufpg_largeobjectverweist) 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ürUPDATE- undDELETE-Anweisungen:Standardmigrationen: Bei Standardmigrationen müssen Ihre Tabellen Primärschlüssel haben, um
UPDATE- undDELETE-Anweisungen zu replizieren.Schnellstart-Migrationen: Bei Schnellstart-Migrationen sind keine Primärschlüssel erforderlich, um
UPDATE- undDELETE-Vorgänge zu replizieren, wenn Sie die Replikatidentität aufINDEXoderFULLfestlegen. Durch die Konfiguration vonREPLICA IDENTITY FULLerhö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_nameaus, 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_defaultzugeordnet.
Nächste Schritte
Ausführliche Informationen zu den Einschränkungen finden Sie unter Bekannte Einschränkungen.
Eine Anleitung für die Migration finden Sie unter Erste Schritte mit Cloud SQL for PostgreSQL-Migrationen.