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.
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 alterações da linguagem de manipulação de dados (DML) são atualizadas automaticamente durante as migrações contínuas. O gerenciamento das mudanças da 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
alloydbexternalsyncao usuário do AlloyDB que aplica as mudanças de DDL. Para ativar consultas ou alterações dos dados, conceda oalloydbexternalsyncpapel aos usuários relevantes do AlloyDB. - 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 o
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
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.