Panoramica
Quando esegui la migrazione di schema, dati e metadati da un database di origine a un database di destinazione, devi assicurarti che tutta questa informazione venga migrata con precisione. Database Migration Service offre un modo ad alta fedeltà per eseguire la migrazione degli oggetti del database (inclusi schema, dati e metadati) da un database all'altro.
Durante il processo di migrazione, i dati e le limitazioni vengono migrati separatamente. Viene eseguita prima la migrazione dei dati e i vincoli come chiavi primarie, chiavi esterne e indici vengono ricreati nell'istanza dopo il dump e il caricamento completi iniziali.Nell'ambito della migrazione del database viene eseguita la migrazione di tutti i seguenti componenti di dati, schema e metadati:
Dati
Tutte le tabelle di tutti i database e gli schemi, esclusi i seguenti schemi:
- Lo schema di informazioni
information_schema
- Eventuali schemi che iniziano con
pg
(ad esempiopg_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 con incremento automatico
Indici secondari
Metadati
Stored procedure
Funzioni
Trigger
Visualizzazioni
Vincoli delle chiavi esterne
Migrazione continua
Solo le modifiche al linguaggio di manipolazione dei dati (DML) vengono aggiornate automaticamente durante le migrazioni continue. La gestione delle modifiche al linguaggio di definizione dei dati (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
cloudsqlexternalsync
all'utente Cloud SQL che applica le modifiche DDL. Per abilitare l'invio di query o la modifica dei dati, concedi il ruolocloudsqlexternalsync
agli utenti Cloud SQL pertinenti. - Utilizza
pglogical.replicate_ddl_command
per 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 nella destinazione sia nell'origine, e deve essere il superutente o il proprietario dell'elemento 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 tabella che vuoi utilizzare[TABLE_NAME]
con il nome della tabella[NEW_NAME_FOR_TABLE]
con il nuovo nome della tabella quando viene eseguita l'operazione di rinominazione
Aggiungere 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}' );
Aggiungere 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}' );
Modificare 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}' );
Modificare 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]');
Creare 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 gli utenti dalla scheda Utenti o 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 agevole verifica che gli oggetti o le 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 agli oggetti di grandi dimensioni. Per le tabelle con tipo di colonna
oid
che 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_largeobject
per il datooid
) non va a buon fine 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
INSERT
durante la fase di acquisizione dei dati modificati (CDC). Devi eseguire manualmente la migrazione delle istruzioniUPDATE
eDELETE
.Database Migration Service non esegue la migrazione dei dati dalle viste materializzate, ma solo dello schema delle viste. Per compilare le visualizzazioni, esegui il seguente comando:
REFRESH MATERIALIZED VIEW view_name
.Gli stati
SEQUENCE
(ad esempiolast_value
) nella nuova destinazione potrebbero variare da quelliSEQUENCE
di origine.Gli spazi tabella personalizzati non sono supportati nell'istanza Cloud SQL di destinazione. Tutti i dati all'interno degli spazi tabella personalizzati vengono migrati allo spazio tabella
pg_default
predefinito in Cloud SQL.