Quando esegui la migrazione di schema, dati e metadati da un database di origine a un database di destinazione, devi assicurarti che tutte le informazioni vengano migrate in modo accurato. Database Migration Service fornisce un meccanismo ad alta fedeltà per eseguire la migrazione degli oggetti del database (inclusi schema, dati e metadati) da un database PostgreSQL a un altro.
Durante il processo di migrazione, i dati e i vincoli vengono migrati in fasi strutturate. La migrazione dei dati avviene prima durante il caricamento dello snapshot iniziale e i vincoli come chiavi primarie, chiavi esterne e indici vengono ricreati nell'istanza di destinazione al termine del caricamento iniziale.
I seguenti componenti di dati, schema e metadati vengono migrati nell'ambito della migrazione del database:
Dati
Tutte le tabelle e gli schemi dei database selezionati per la migrazione, esclusi i seguenti schemi di sistema:
- Lo schema delle informazioni (
information_schema) - Qualsiasi schema che inizia con
pg_(ad esempiopg_catalog,pg_toast)
Per saperne di più su questi schemi di sistema, consulta Limitazioni note.
Puoi aggiungere o rimuovere database da un job di migrazione durante una migrazione in corso. La rimozione di un database interrompe la replica per quel database senza eliminare il database già migrato nell'istanza di destinazione. Per saperne di più, consulta Modifica un job di migrazione.
- Lo schema delle informazioni (
Schema
Denominazione degli oggetti
Chiavi primarie
Tipi di dati
Posizioni ordinali delle colonne
Valori predefiniti
Supporto di valori Null
Attributi di identità e seriali
Indici secondari
Metadati
Stored procedure
Funzioni
Trigger
Visualizzazioni
Vincoli di chiave esterna
Migrazione continua
Le modifiche al data manipulation language (DML), come le operazioni INSERT, UPDATE e DELETE sulle tabelle con una chiave primaria o un'identità di replica, vengono replicate automaticamente durante le migrazioni continue.
Se durante il processo di migrazione vengono apportate modifiche al linguaggio di definizione dei dati (DDL) nel database di origine, devi aggiornare l'istanza di destinazione in modo che i database rimangano compatibili. Puoi apportare le modifiche DDL nei seguenti modi:
Esecuzione manuale del DDL: interrompi le scritture nel database di origine, esegui i comandi DDL nel database di origine ed esegui i comandi DDL corrispondenti nel database di destinazione. Prima di eseguire i comandi DDL sulla destinazione, concedi il ruolo
cloudsqlexternalsyncall'utente Cloud SQL che applica le modifiche.Comandi DDL replicati con
pglogical: puoi utilizzarepglogical.replicate_ddl_commandper eseguire il DDL sia sui database di origine che su quelli di destinazione in un punto coerente del flusso di replica. L'utente che esegue questo comando deve disporre di credenziali corrispondenti sia nell'istanza di origine sia in quella di destinazione e deve essere un super utente o il proprietario dell'oggetto modificato.
Le seguenti schede forniscono comandi SQL di esempio per le operazioni DDL comuni utilizzando pglogical.replicate_ddl_command:
Tabelle con chiavi primarie
Aggiungi una colonna a una tabella con una chiave primaria
SELECT pglogical.replicate_ddl_command( 'ALTER TABLE [SCHEMA].[TABLE_NAME] ADD COLUMN surname varchar(20)', '{default}' );
Modifica il nome di una tabella con una chiave primaria
SELECT pglogical.replicate_ddl_command( 'ALTER TABLE [SCHEMA].[TABLE_NAME] RENAME TO [NEW_NAME_FOR_TABLE]', '{default}' );
Crea una tabella con una chiave primaria
Esegui questi comandi sul database di origine:
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]');
Tabelle senza chiavi primarie
Aggiungi una colonna a una tabella senza chiave primaria
SELECT pglogical.replicate_ddl_command( 'ALTER TABLE [SCHEMA].[TABLE_NAME] ADD COLUMN surname varchar(20)', '{default_insert_only}' );
Modifica il nome di una tabella senza chiave primaria
SELECT pglogical.replicate_ddl_command( 'ALTER TABLE [SCHEMA].[TABLE_NAME] RENAME TO [NEW_NAME_FOR_TABLE]', '{default_insert_only}' );
Crea una tabella senza chiave primaria
Esegui questi comandi sul database di origine:
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]');
Elementi di cui non viene eseguita la migrazione
Utenti e privilegi: le credenziali di accesso e i ruoli degli utenti non vengono migrati. Per configurare gli utenti nell'istanza di destinazione, utilizza la scheda Utenti nella console Google Cloud o gestiscili utilizzando un client SQL. Per saperne di più, consulta Crea e gestisci gli utenti nella documentazione di Cloud SQL.
Estensioni non supportate: Database Migration Service non esegue la migrazione delle estensioni non supportate da Cloud SQL. La presenza di queste estensioni non blocca il job di migrazione, ma le applicazioni che fanno riferimento a estensioni non supportate potrebbero riscontrare errori. Per l'elenco delle estensioni supportate, consulta Estensioni PostgreSQL nella documentazione di Cloud SQL.
Oggetti di grandi dimensioni: gli oggetti di grandi dimensioni di PostgreSQL (tipo di dati
oidche fa riferimento apg_largeobject) non vengono replicati dalla decodifica logica.Tabelle senza chiavi primarie: Database Migration Service esegue la migrazione dello snapshot iniziale e replica le istruzioni
INSERTdurante la fase CDC. Per gli estratti contoUPDATEeDELETE:Migrazioni standard: le migrazioni standard richiedono che le tabelle abbiano chiavi primarie per replicare le istruzioni
UPDATEeDELETE.Migrazioni con avvio rapido: con le migrazioni con avvio rapido, le chiavi primarie non sono necessarie per replicare le operazioni
UPDATEeDELETEse imposti l'identità della replica suINDEXoFULL. La configurazione diREPLICA IDENTITY FULLaumenta il volume del log write-ahead (WAL) e l'overhead delle risorse. Se possibile, ti consigliamo di aggiungere una chiave primaria. Per saperne di più, consulta la documentazione sull'identità della replica PostgreSQL e la guida alla migrazione rapida.
Viste materializzate: Database Migration Service esegue la migrazione delle definizioni vista materializzata, ma non dei dati memorizzati nella cache sottostanti. Per compilare le viste materializzate nella destinazione, esegui
REFRESH MATERIALIZED VIEW view_namedopo la migrazione.Stati delle sequenze: i valori attuali delle sequenze (ad esempio
last_value) nell'istanza di destinazione potrebbero differire dall'origine durante il CDC in corso. I valori delle sequenze vengono sincronizzati durante la fase finale della promozione.Tablespace personalizzati: Cloud SQL non supporta i tablespace personalizzati. Gli oggetti definiti in tablespace personalizzati vengono rimappati automaticamente al tablespace
pg_defaultpredefinito in Cloud SQL.
Passaggi successivi
Per i dettagli completi sulle limitazioni, consulta Limitazioni note.
Per iniziare con una procedura dettagliata di migrazione, consulta Inizia a utilizzare le migrazioni di Cloud SQL per PostgreSQL.