Precisione della migrazione

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 esempio pg_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.

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:

  1. 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 cloudsqlexternalsync all'utente Cloud SQL che applica le modifiche.

  2. Comandi DDL replicati con pglogical: puoi utilizzare pglogical.replicate_ddl_command per 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 oid che fa riferimento a pg_largeobject) non vengono replicati dalla decodifica logica.

  • Tabelle senza chiavi primarie: Database Migration Service esegue la migrazione dello snapshot iniziale e replica le istruzioni INSERT durante la fase CDC. Per gli estratti conto UPDATE e DELETE:

    • Migrazioni standard: le migrazioni standard richiedono che le tabelle abbiano chiavi primarie per replicare le istruzioni UPDATE e DELETE.

    • Migrazioni con avvio rapido: con le migrazioni con avvio rapido, le chiavi primarie non sono necessarie per replicare le operazioni UPDATE e DELETE se imposti l'identità della replica su INDEX o FULL. La configurazione di REPLICA IDENTITY FULL aumenta 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_name dopo 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_default predefinito in Cloud SQL.

Passaggi successivi