Panoramica
Quando esegui la migrazione di schema, dati e metadati da un database di origine a un database di destinazione, devi assicurarti che tutte queste informazioni vengano migrate con precisione. Database Migration Service offre un modo ad alta fedeltà per eseguire la migrazione degli oggetti di database (inclusi schema, dati e metadati) da un database a un altro.
Durante il processo di migrazione, i dati e i vincoli vengono migrati separatamente. I dati vengono migrati per primi e i vincoli come chiavi primarie, chiavi esterne e indici vengono ricreati sull'istanza dopo il dump e il caricamento completi iniziali.Tutti i seguenti componenti di dati, schema e metadati vengono migrati nell'ambito della migrazione del database:
Dati
Tutte le tabelle di tutti i database e gli schemi, ad esclusione dei seguenti schemi:
- Lo schema di informazioni
information_schema - Qualsiasi schema che inizia con
pg(ad esempio,pg_catalog)
Per ulteriori informazioni su questi schemi, consulta Limitazioni note.
- Lo schema di informazioni
Schema
Denominazione
Chiave primaria
Tipo di dati
Posizione ordinale
Valore predefinito
Supporto di valori Null
Attributi di incremento automatico
Indici secondari
Metadati
Stored procedure
Funzioni
Trigger
Visualizzazioni
Vincoli di chiave esterna
Migrazione continua
Durante le migrazioni continue, vengono aggiornate automaticamente solo le modifiche del data manipulation language (DML). La gestione delle modifiche del data definition language (DDL) in modo che i database di origine e di destinazione rimangano compatibili è responsabilità dell'utente e può essere eseguita in due modi:
-
Interrompi le scritture nell'origine ed esegui i comandi DDL sia nell'origine sia nella
destinazione. Prima di eseguire i comandi DDL sulla destinazione, concedi
cloudsqlexternalsyncall'utente Cloud SQL che applica le modifiche DDL. Per abilitare l'invio di query o la modifica dei dati, concedi ilcloudsqlexternalsyncruolo agli utenti Cloud SQL pertinenti. - Utilizza
pglogical.replicate_ddl_commandper consentire l'esecuzione di DDL su origine e destinazione in un punto coerente. L'utente che esegue questo comando deve avere lo stesso nome utente sia nell'origine sia nella destinazione, e deve essere il superutente o il proprietario dell'artefatto di cui viene eseguita la migrazione (ad esempio, la tabella, la sequenza, la visualizzazione o il database).Ecco alcuni esempi di utilizzo di
pglogical.replicate_ddl_command.Sostituisci:
[SCHEMA]con il nome dello schema della tabella che vuoi utilizzare[TABLE_NAME]con il nome della tabella[NEW_NAME_FOR_TABLE]con il nuovo nome della tabella quando esegui l'operazione di ridenominazione
Aggiungi una colonna a una tabella di database con una chiave primaria
select pglogical.replicate_ddl_command( 'ALTER TABLE [SCHEMA].[TABLE_NAME] add column surname varchar(20)', '{default}' );
Aggiungi una colonna a una tabella di database senza una 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 di database con una chiave primaria
select pglogical.replicate_ddl_command( 'ALTER TABLE [SCHEMA].[TABLE_NAME] RENAME TO [NEW_NAME_FOR_TABLE]', '{default}' );
Modifica il nome di una tabella di database senza una chiave primaria
select pglogical.replicate_ddl_command( 'ALTER TABLE [SCHEMA].[TABLE_NAME] RENAME TO [NEW_NAME_FOR_TABLE]', '{default_insert_only}' );
Crea una tabella di database con una chiave primaria
Esegui questi comandi:
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]');
Crea una tabella di database senza una chiave primaria
Esegui questi comandi:
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]' );
Che cosa non viene migrato
Per aggiungere utenti a un'istanza di destinazione Cloud SQL, vai all'istanza e aggiungi utenti dalla scheda Utenti o da un client PostgreSQL. Scopri di più sulla creazione e sulla gestione degli utenti PostgreSQL.
Database Migration Service non esegue la migrazione delle estensioni non supportate da Cloud SQL. La presenza di queste estensioni non blocca la migrazione, ma per garantire un processo di migrazione senza problemi, verifica che i tuoi oggetti o applicazioni non facciano riferimento a estensioni non supportate. Ti consigliamo di rimuovere queste estensioni e questi riferimenti dal database di origine prima di procedere.
Gli oggetti di grandi dimensioni non possono essere replicati, poiché la funzionalità di decodifica logica di PostgreSQL non supporta la decodifica delle modifiche apportate agli oggetti di grandi dimensioni. Per le tabelle con tipo di colonna
oidche fa riferimento a oggetti di grandi dimensioni, le righe vengono sincronizzate e le nuove righe vengono replicate. Tuttavia, il tentativo di accedere all'oggetto di grandi dimensioni nel database di destinazione (lettura tramitelo_get, esportazione tramitelo_export, o controllo del catalogopg_largeobjectper iloid) non riesce e viene visualizzato un messaggio che indica che l'oggetto di grandi dimensioni non esiste.Per le tabelle senza chiavi primarie, Database Migration Service supporta la migrazione degli snapshot iniziali e delle istruzioni
INSERTdurante la fase Change Data Capture (CDC). Devi eseguire la migrazione manuale delle istruzioniUPDATEeDELETE.Database Migration Service non esegue la migrazione dei dati dalle viste materializzate, ma solo dello schema della vista. Per popolare le viste, esegui il comando seguente:
REFRESH MATERIALIZED VIEW view_name.Gli stati
SEQUENCE(ad esempio,last_value) nella nuova destinazione potrebbero variare rispetto agli statiSEQUENCEdi origine.Gli spazi di tabella personalizzati non sono supportati nell'istanza Cloud SQL di destinazione. Tutti i dati all'interno degli spazi di tabella personalizzati vengono migrati nello spazio di tabella
pg_defaultpredefinito in Cloud SQL.