Fidelidade de migração

Ao migrar esquemas, dados e metadados de um banco de dados de origem para um de destino, é importante garantir que todas as informações sejam migradas com precisão. O Database Migration Service oferece um mecanismo de alta fidelidade para migrar objetos de banco de dados (incluindo esquema, dados e metadados) de um banco de dados PostgreSQL para outro.

Durante o processo de migração, os dados e as restrições são migrados em fases estruturadas. Os dados são migrados primeiro durante o carregamento inicial do snapshot, e as restrições, como chaves primárias, chaves externas e índices, são recriadas na instância de destino após a conclusão do carregamento inicial.

Os seguintes componentes de dados, esquema e metadados são migrados como parte da migração do banco de dados:

Dados

  • Todas as tabelas e esquemas de bancos de dados selecionados para migração, exceto os seguintes esquemas do sistema:

    • O esquema de informações (information_schema)
    • Qualquer esquema que comece com pg_ (por exemplo, pg_catalog, pg_toast)

    Para mais informações sobre esses esquemas do sistema, consulte Limitações conhecidas.

    É possível adicionar ou remover bancos de dados de um job de migração durante uma migração em andamento. A remoção de um banco de dados interrompe a replicação dele sem excluir o banco de dados já migrado na instância de destino. Para mais informações, consulte Editar um job de migração.

Esquema

  • Nomenclatura de objetos

  • Chaves primárias

  • Tipos de dados

  • Posições de coluna ordinal

  • Valores padrão

  • Nulidade

  • Atributos de identidade e seriais

  • Índices secundários

Metadados

  • Procedimentos armazenados

  • Funções

  • Gatilhos

  • Visualizações

  • Restrições de chave externa

Migração contínua

As alterações da linguagem de manipulação de dados (DML, na sigla em inglês), como as operações INSERT, UPDATE e DELETE em tabelas com uma chave primária ou identidade de réplica, são replicadas automaticamente durante as migrações contínuas.

Se houver alterações na linguagem de definição de dados (DDL) no banco de dados de origem durante o processo de migração, será necessário atualizar a instância de destino para que os bancos de dados permaneçam compatíveis. É possível realizar as mudanças de DDL das seguintes maneiras:

  1. Execução manual de DDL: interrompa as gravações no banco de dados de origem, execute os comandos DDL no banco de dados de origem e execute os comandos DDL correspondentes no banco de dados de destino. Antes de executar comandos DDL no destino, conceda o papel cloudsqlexternalsync ao usuário do Cloud SQL que está aplicando as mudanças.

  2. Comandos DDL replicados com pglogical: use pglogical.replicate_ddl_command para executar DDL nos bancos de dados de origem e de destino em um ponto consistente no fluxo de replicação. O usuário que executa esse comando precisa ter credenciais correspondentes nas instâncias de origem e de destino e precisa ser um superusuário ou o proprietário do objeto modificado.

As guias a seguir mostram exemplos de comandos SQL para operações comuns de DDL usando pglogical.replicate_ddl_command:

Tabelas com chaves primárias

Adicionar uma coluna a uma tabela com uma chave primária

SELECT pglogical.replicate_ddl_command(
  'ALTER TABLE [SCHEMA].[TABLE_NAME] ADD COLUMN surname varchar(20)',
  '{default}'
);

Mudar o nome de uma tabela com uma chave primária

SELECT pglogical.replicate_ddl_command(
  'ALTER TABLE [SCHEMA].[TABLE_NAME] RENAME TO [NEW_NAME_FOR_TABLE]',
  '{default}'
);

Criar uma tabela com uma chave primária

Execute os seguintes comandos no banco de dados de origem:

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]');

Tabelas sem chaves primárias

Adicionar uma coluna a uma tabela sem uma chave primária

SELECT pglogical.replicate_ddl_command(
  'ALTER TABLE [SCHEMA].[TABLE_NAME] ADD COLUMN surname varchar(20)',
  '{default_insert_only}'
);

Mudar o nome de uma tabela sem uma chave primária

SELECT pglogical.replicate_ddl_command(
  'ALTER TABLE [SCHEMA].[TABLE_NAME] RENAME TO [NEW_NAME_FOR_TABLE]',
  '{default_insert_only}'
);

Criar uma tabela sem uma chave primária

Execute os seguintes comandos no banco de dados de origem:

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]');

O que não é migrado

  • Usuários e privilégios: as credenciais de login e os papéis do usuário não são migrados. Para configurar usuários na instância de destino, use a guia Usuários no console do Google Cloud ou gerencie-os usando um cliente SQL. Para mais informações, consulte Criar e gerenciar usuários na documentação do Cloud SQL.

  • Extensões sem suporte: o Database Migration Service não migra extensões que não são compatíveis com o Cloud SQL. A presença dessas extensões não bloqueia o job de migração, mas os aplicativos que fazem referência a extensões não compatíveis podem apresentar erros. Para ver a lista de extensões compatíveis, consulte Extensões do PostgreSQL na documentação do Cloud SQL.

  • Objetos grandes: os objetos grandes do PostgreSQL (tipo de dados oid referenciando pg_largeobject) não são replicados pela decodificação lógica.

  • Tabelas sem chaves primárias: o Database Migration Service migra o snapshot inicial e replica as instruções INSERT durante a fase de CDC. Para instruções UPDATE e DELETE:

    • Migrações padrão: as migrações padrão exigem que as tabelas tenham chaves primárias para replicar as instruções UPDATE e DELETE.

    • Migrações de início rápido: com as migrações de início rápido, as chaves primárias não são necessárias para replicar as operações UPDATE e DELETE se você definir a identidade da réplica como INDEX ou FULL. A configuração de REPLICA IDENTITY FULL aumenta o volume do registro prévio de escrita (WAL) e a sobrecarga de recursos. Recomendamos adicionar uma chave primária sempre que possível. Para mais informações, consulte a documentação sobre identidade de réplica do PostgreSQL e o guia de migração de início rápido.

  • Visualizações materializadas: o Database Migration Service migra as definições de visualização materializada, mas não os dados armazenados em cache. Para preencher as visualizações materializadas no destino, execute REFRESH MATERIALIZED VIEW view_name após a migração.

  • Estados de sequência: os valores atuais das sequências (como last_value) na instância de destino podem ser diferentes da origem durante a CDC em andamento. Os valores de sequência são sincronizados durante a etapa final da promoção.

  • Espaços de tabela personalizados: o Cloud SQL não é compatível com espaços de tabela personalizados. Os objetos definidos em espaços de tabela personalizados são remapeados automaticamente para o espaço de tabela padrão pg_default no Cloud SQL.

A seguir