Panoramica
Quando esegui la migrazione di schema, dati e metadati da un database di origine a un database di destinazione, vuoi assicurarti che tutte queste informazioni vengano migrate in modo accurato. 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 nell'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, esclusi i 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 la sezione 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
Solo le modifiche al data manipulation language (DML) vengono aggiornate automaticamente durante le migrazioni continue. La gestione delle modifiche al 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:
-
Interrompere le scritture sull'origine ed eseguire i comandi DDL sia sull'origine che sulla 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 il ruolocloudsqlexternalsyncagli utenti Cloud SQL pertinenti. - Utilizzando
pglogical.replicate_ddl_commandper consentire l'esecuzione del DDL su origine e destinazione in un punto coerente. L'utente che esegue questo comando deve avere lo stesso nome utente sia nell'origine che 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 vista 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
Aggiungere una colonna a una tabella del database con una chiave primaria
select pglogical.replicate_ddl_command( 'ALTER TABLE [SCHEMA].[TABLE_NAME] add column surname varchar(20)', '{default}' );
Aggiungere una colonna a una tabella del database senza chiave primaria
select pglogical.replicate_ddl_command( 'ALTER TABLE [SCHEMA].[TABLE_NAME] add column surname varchar(20)', '{default_insert_only}' );
Modificare il nome di una tabella del database con una chiave primaria
select pglogical.replicate_ddl_command( 'ALTER TABLE [SCHEMA].[TABLE_NAME] RENAME TO [NEW_NAME_FOR_TABLE]', '{default}' );
Modificare il nome di una tabella del 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]' );
Elementi di cui non viene eseguita la migrazione
Per aggiungere utenti a un'istanza di destinazione Cloud SQL, vai all'istanza e aggiungi utenti dalla scheda Utenti oppure aggiungili da un client PostgreSQL. Scopri di più su come creare e gestire gli 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 fluido 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, in quanto la funzionalità di decodifica logica di PostgreSQL non supporta la decodifica delle modifiche 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_exporto controllo del catalogopg_largeobjectper iloidspecificato) 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 manualmente la migrazione delle istruzioniUPDATEeDELETE.Database Migration Service non esegue la migrazione dei dati dalle viste materializzate, ma solo dello schema della vista. Per popolare le visualizzazioni, esegui il comando seguente:
REFRESH MATERIALIZED VIEW view_name.Gli stati
SEQUENCE(ad esempiolast_value) della nuova destinazione potrebbero variare rispetto agli statiSEQUENCEdell'origine.Gli spazi delle tabelle personalizzati non sono supportati nell'istanza Cloud SQL di destinazione. Tutti i dati all'interno degli spazi delle tabelle personalizzati vengono migrati nello spazio delle tabelle
pg_defaultpredefinito in Cloud SQL.