Problemas conhecidos e limitações com migrações online do PostgreSQL para o Banco de Dados do Azure para PostgreSQL

Importante

Recomendamos que você use o novo serviço de migração no Banco de Dados do Azure para PostgreSQL para uma experiência de migração mais simplificada e eficiente. Este serviço simplifica o processo dando suporte a uma variedade de ambientes de origem, garantindo uma transição sem problemas para o Banco de Dados do Azure para PostgreSQL.

Este artigo descreve os problemas conhecidos e limitações associadas a migrações online do Oracle para o Banco de Dados do Azure para PostgreSQL usando o DMS (Serviço de Migração de Banco de Dados) do Azure.

Configuração de migração online

  • As versões de origem mais baixas do PostgreSQL com suporte são 9.4 e a versão de destino mais alta com suporte é 14.9.

  • Apenas migrações para a mesma versão ou para uma versão superior são suportadas. Por exemplo, há suporte para migração do PostgreSQL 9.5 para o Banco de Dados do Azure para PostgreSQL 9.6 ou 10. 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:

    Parâmetro Descrição
    wal_level Definido como lógico.
    max_replication_slots Defina pelo menos o número máximo de bancos de dados para migração. Se você quiser migrar 4 bancos de dados, defina o valor como 4, pelo menos.
    max_wal_senders Defina o número de bancos de dados em execução simultaneamente. O valor recomendado é 10.
  • Adicione o IP do agente DMS à origem do pg_hba.conf do PostgreSQL.

    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:

      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.

Limitações de tamanho

  • Você pode migrar até 1 TB de dados do PostgreSQL para Banco de Dados do Azure para PostgreSQL usando um único serviço DMS.
  • O DMS permite que os usuários escolham tabelas dentro de um banco de dados que desejam migrar.

Captura de tela da tela do DMS que mostra a opção de escolher tabelas.

Nos bastidores, o comando pg_dump leva o despejo das tabelas selecionadas usando uma das seguintes opções:

  • -T para incluir os nomes de tabela escolhidos na interface do usuário
  • -t para excluir os nomes de tabela não escolhidos pelo usuário

Há um limite máximo de 7.500 caracteres que podem ser incluídos como parte do comando pg_dump após a opção -t ou -T. O comando pg_dump usa a contagem dos caracteres para tabelas selecionadas ou não selecionadas, o que for menor. Se a contagem de caracteres para as tabelas selecionadas e não selecionadas exceder 7.500, o comando pg_dump falhará com um erro.

Para o exemplo anterior, o comando pg_dump seria:

pg_dump -h hostname -u username -d databasename -T "\"public\".\"table_1\"" -T "\"public\".\"table_2\""

No comando anterior, o número de caracteres é 55 (inclui aspas duplas, espaços, -T e a barra)

Limitações do tipo de dados

Limitação: se não houver chave primária nas 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. Remova a chave primária após a conclusão da migração de dados.

Limitações com a migração online do RDS PostgreSQL da AWS

Ao tentar executar uma migração online do RDS (banco de dados relacional) PostgreSQL da AWS (Amazon Web Services) para o Banco de Dados do Azure para PostgreSQL, você poderá encontrar os seguintes erros:

  • 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 difere entre os bancos de dados de origem e destino.

    Solução alternativa: verifique se o esquema no destino corresponde ao esquema da origem. Para obter mais informações sobre como migrar o esquema, confira a documentação de migração online do Banco de Dados do Azure para PostgreSQL.

  • 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 difere entre os bancos de dados de origem e de destino.

    Solução alternativa: verifique se o esquema no destino corresponde ao esquema da origem. Para obter mais informações sobre como migrar o esquema, confira a documentação de migração online do Banco de Dados do Azure para PostgreSQL.

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

    Limitação: este erro ocorre quando o banco de dados de origem está vazio. Você provavelmente selecionou o banco de dados incorreto como a 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 {banco de dados} está vazio. Migrar o esquema.

    Limitação: este erro ocorre quando não há um esquema no banco de dados de destino. Confira se o esquema do destino corresponde ao esquema da origem.

    Solução alternativa: verifique se o esquema no destino corresponde ao esquema da origem. Para obter mais informações sobre como migrar o esquema, confira a documentação de migração online do Banco de Dados do Azure para PostgreSQL.

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 é imprevisível.

  • A atualização de um segmento de chave primária é ignorada. A aplicação de tal atualização é identificada pelo destino como uma atualização que não atualizou nenhuma linha. O resultado será um registro gravado na tabela de exceções.

  • Se a tabela tiver uma coluna JSON, qualquer operação DELETE ou UPDATE nessa tabela poderá levar a uma migração com falha.

  • Migração de várias tabelas com o mesmo nome, mas com capitalização diferente, poderá causar um comportamento imprevisível que não tem suporte. Um exemplo é o uso de tabela1, TABELA1 e Tabela1.

  • 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, uma única atividade de migração pode acomodar somente até quatro bancos de dados.

  • Não há suporte para a migração da tabela pg_largeobject.