Problemas conhecidos/limitações de migração com migrações on-line para o BD do Azure para PostgreSQL

O problemas e limitações conhecidos associados às migrações online do PostgreSQL para o Banco de Dados do Azure para PostgreSQL são descritos nas seções a seguir.

Configuração de migração online

  • A origem do servidor PostgreSQL deve estar executando a versão 9.4, 9.5, 9.6, 10 ou 11 ou posterior. Para obter mais informações, consulte o artigo Versões com suporte do Banco de Dados do PostgreSQL.

  • Apenas migrações para a mesma versão ou para uma versão superior são suportadas. Por exemplo, há suporte para a migração do PostgreSQL 9.5 para o Banco de Dados do Azure para PostgreSQL 9.6 ou 10, mas não há suporte para a migração do PostgreSQL 11 para o PostgreSQL 9.6.

  • Para habilitar a replicação lógica no arquivo postgresql.conf do PostgreSQL de origem defina os seguintes parâmetros:

    • wal_level = lógica
    • max_replication_slots = [número máximo de bancos de dados para migração]; se você quiser migrar 4 bancos de dados, defina o valor como 4.
    • max_wal_senders = [número de bancos de dados executados simultaneamente]; o valor recomendado é 10
  • Adicionar o IP do agente DMS à origem do PostgresSQL pg_hba.conf

    1. Anote o endereço IP do DMS após concluir o provisionamento de uma instância do DMS.

    2. Adicione o endereço IP ao arquivo pg_hba.conf conforme mostrado:

          host    all    172.16.136.18/10    md5
          host    replication postgres    172.16.136.18/10     md5
      
  • O usuário deve ter a função REPLICATION no servidor que hospeda o banco de dados de origem.

  • Os esquemas de banco de dados de origem e destino devem corresponder.

  • O esquema no Banco de Dados do Azure para PostgreSQL de destino não deve ter chaves estrangeiras. Use a consulta a seguir para remover as chaves estrangeiras:

                  SELECT Queries.tablename
           ,concat('alter table ', Queries.tablename, ' ', STRING_AGG(concat('DROP CONSTRAINT ', Queries.foreignkey), ',')) as DropQuery
                ,concat('alter table ', Queries.tablename, ' ', 
                                                STRING_AGG(concat('ADD CONSTRAINT ', Queries.foreignkey, ' FOREIGN KEY (', column_name, ')', 'REFERENCES ', foreign_table_name, '(', foreign_column_name, ')' ), ',')) as AddQuery
        FROM
        (SELECT
        tc.table_schema, 
        tc.constraint_name as foreignkey, 
        tc.table_name as tableName, 
        kcu.column_name, 
        ccu.table_schema AS foreign_table_schema,
        ccu.table_name AS foreign_table_name,
        ccu.column_name AS foreign_column_name 
    FROM 
        information_schema.table_constraints AS tc 
        JOIN information_schema.key_column_usage AS kcu
          ON tc.constraint_name = kcu.constraint_name
          AND tc.table_schema = kcu.table_schema
        JOIN information_schema.constraint_column_usage AS ccu
          ON ccu.constraint_name = tc.constraint_name
          AND ccu.table_schema = tc.table_schema
    WHERE constraint_type = 'FOREIGN KEY') Queries
      GROUP BY Queries.tablename;
    
    

    Execute a remoção de chave estrangeira (que é a segunda coluna) no resultado da consulta.

  • O esquema no Banco de Dados do Azure para PostgreSQL de destino-servidor único não deve ter gatilhos. Use o seguinte para desabilitar gatilhos no banco de dados de destino:

    SELECT Concat('DROP TRIGGER ', Trigger_Name, ';') FROM  information_schema.TRIGGERS WHERE TRIGGER_SCHEMA = 'your_schema';
    

Limitações de tamanho

  • Você pode migrar até 2 TB de dados do PostgreSQL para BD do Azure para PostgreSQL usando um único serviço DMS.

Limitações de tipo de dados

Limitação: se não houver nenhuma chave primária em tabelas, as alterações poderão não ser sincronizadas com o banco de dados de destino.

Solução alternativa: defina temporariamente uma chave primária na tabela para que a migração continue. Você poderá remover a chave primária após a conclusão da migração de dados.

Limitações ao migrar online do AWS RDS PostgreSQL

Ao tentar executar uma migração on-line do AWS RDS PostgreSQL para Banco de Dados do Azure para PostgreSQL, você poderá encontrar os erros a seguir.

  • Erro: O valor padrão da coluna '{column}' na tabela '{table}' no banco de dados '{database}' é diferente nos servidores de origem e destino. É '{value on source}' na origem e '{value on target}' no destino.

    Limitação: este erro ocorre quando o valor padrão em um esquema de colunas é diferente nos bancos de dados de origem e destino. Solução alternativa: verifique se o esquema no destino corresponde ao esquema na origem. Para saber mais sobre como migrar o esquema, consulte a documentação de migração on-line do PostgreSQL do Azure.

  • Erro: O banco de dados de destino '{database}' tem '{number of tables}' tabelas, enquanto que o banco de dados de origem '{database}' tem '{number of tables}' tabelas. O número de tabelas nos bancos de dados de origem e destino deve corresponder.

    Limitação: esse erro ocorre quando o número de tabelas é diferente entre os bancos de dados de origem e de destino.

    Solução alternativa: verifique se o esquema no destino corresponde ao esquema na origem. Para saber mais sobre como migrar o esquema, consulte a documentação de migração on-line do PostgreSQL do Azure.

  • Erro: o banco de dados de origem {database} está vazio.

    Limitação: este erro ocorre quando o banco de dados de origem está vazio. É provável que você tenha selecionado o banco de dados errado como origem.

    Solução alternativa: verifique novamente o banco de dados de origem selecionado para migração e tente novamente.

  • Erro: o banco de dados de destino {database} está vazio. Migre o esquema.

    Limitação: este erro ocorre quando não há um esquema no banco de dados de destino. Certifique-se de corresponder o esquema de destino ao esquema da origem. Solução alternativa: verifique se o esquema no destino corresponde ao esquema na origem. Para saber mais sobre como migrar o esquema, consulte a documentação de migração on-line do PostgreSQL do Azure.

Outras limitações

  • O nome do banco de dados não pode incluir um ponto e vírgula (;).
  • Uma tabela capturada deve ter uma Chave Primária. Se uma tabela não tiver uma chave primária, o resultado das operações de registro EXCLUIR e ATUALIZAR será imprevisível.
  • A atualização de um segmento de chave primária é ignorada. Nesses casos, a aplicação de tal atualização será identificada pelo destino como uma atualização que não atualizou nenhuma linha e resultará em um registro gravado na tabela de exceções.
  • A migração de várias tabelas com o mesmo nome, mas um caso diferente (por exemplo, tabela1, TABELA1 e Tabela1) pode causar um comportamento imprevisível e, portanto, não tem suporte.
  • A alteração do processamento de [CREATE | ALTERAR | SOLTAR | TRUNCATE] da tabela DDLs não é suportada.
  • No Serviço de Migração de Banco de Dados do Azure, uma única atividade de migração só pode acomodar até quatro bancos de dados.
  • Não há suporte para a migração da tabela pg_largeobject.