Visão geral
Ao migrar o esquema, os dados e os metadados de um banco de dados de origem para um de destino, é importante garantir que todas essas informações sejam migradas com precisão. O Database Migration Service oferece uma maneira de alta fidelidade de migrar objetos de banco de dados (incluindo esquema, dados e metadados) de um banco de dados para outro.
Durante o processo de migração, os dados e as restrições são migrados separadamente. Os dados são migrados primeiro, e as restrições, como chaves primárias, chaves estrangeiras e índices, são recriadas na instância após o despejo e o carregamento completos iniciais.Todos os componentes de dados, esquema e metadados a seguir 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 bancos de dados do sistema:
- O esquema de informações
information_schema - Qualquer esquema que comece com
pg(por exemplo,pg_catalog)
Para mais informações sobre esses esquemas, consulte Limitações conhecidas.
- O esquema de informações
Esquema
Nomenclatura
Chave primária
Tipo de dado
Posição ordinal
Valor padrão
Nulidade
Atributos de incremento automático
Índices secundários
Metadados
Procedimentos armazenados
Funções
Gatilhos
Visualizações
Restrições de chave externa
Migração contínua
Somente as mudanças na linguagem de manipulação de dados (DML) são atualizadas automaticamente durante migrações contínuas. O gerenciamento de mudanças na linguagem de definição de dados (DDL) para que os bancos de dados de origem e destino permaneçam compatíveis é de responsabilidade do usuário e pode ser feito de duas maneiras:
-
Interrompendo as gravações na origem e executando os comandos DDL na origem e no
destino. Antes de executar comandos DDL no destino, conceda
cloudsqlexternalsyncao usuário do Cloud SQL que aplica as mudanças de DDL. Para ativar a consulta ou a mudança dos dados, conceda ocloudsqlexternalsyncpapel aos usuários relevantes do Cloud SQL. - Usando o
pglogical.replicate_ddl_commandpara permitir que a DDL seja executada na origem e no destino em um ponto consistente. O usuário que executa esse comando precisa ter o mesmo nome de usuário na origem e no destino, e precisa ser o superusuário ou o proprietário do artefato que está sendo migrado (por exemplo, a tabela, a sequência, a visualização ou o banco de dados).Confira alguns exemplos de como usar
pglogical.replicate_ddl_command.Substitua:
[SCHEMA]pelo nome do esquema de tabela que você quer usar[TABLE_NAME]pelo nome da tabela[NEW_NAME_FOR_TABLE]pelo novo nome da tabela ao realizar a operação de renomeação
Adicionar uma coluna a uma tabela de banco de dados com uma chave primária
select pglogical.replicate_ddl_command( 'ALTER TABLE [SCHEMA].[TABLE_NAME] add column surname varchar(20)', '{default}' );
Adicionar uma coluna a uma tabela de banco de dados 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 de banco de dados com uma chave primária
select pglogical.replicate_ddl_command( 'ALTER TABLE [SCHEMA].[TABLE_NAME] RENAME TO [NEW_NAME_FOR_TABLE]', '{default}' );
Mudar o nome de uma tabela de banco de dados 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 de banco de dados com uma chave primária
Execute os comandos a seguir:
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]');
Criar uma tabela de banco de dados sem uma chave primária
Execute os comandos a seguir:
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
Para adicionar usuários a uma instância de destino do Cloud SQL, acesse a instância e adicione usuários na guia Usuários ou adicione-os de um cliente PostgreSQL. Saiba mais sobre como criar e gerenciar usuários do PostgreSQL.
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 a migração, mas, para garantir um processo de migração tranquilo, verifique se seus objetos ou aplicativos não fazem referência a extensões não compatíveis. Recomendamos remover essas extensões e referências do banco de dados de origem antes de continuar.
Objetos grandes não podem ser replicados, já que o recurso de decodificação lógica do PostgreSQL não oferece suporte à decodificação de mudanças em objetos grandes. Para tabelas que têm o tipo de coluna
oidreferenciando objetos grandes, as linhas são sincronizadas e novas linhas são replicadas. No entanto, tentar acessar o objeto grande no banco de dados de destino (leitura usandolo_get, exportação usandolo_export, ou verificar o catálogopg_largeobjectpara ooid), falha com uma mensagem informando que o objeto grande não existe.Para tabelas sem chaves primárias, o Database Migration Service oferece suporte à migração de snapshots iniciais e instruções
INSERTdurante a fase de captura de dados alterados (CDC). Migre as instruçõesUPDATEeDELETEmanualmente.O Database Migration Service não migra dados de visualizações materializadas, apenas o esquema de visualização. Para preencher as visualizações, execute o seguinte comando:
REFRESH MATERIALIZED VIEW view_name.Os estados
SEQUENCE(por exemplo,last_value) no novo destino podem variar dos estadosSEQUENCEde origem.Os espaços de tabela personalizados não são aceitos na instância de destino do Cloud SQL. Todos os dados dentro de espaços de tabela personalizados são migrados para o espaço de tabela
pg_defaultpadrão no Cloud SQL.