Problemas conhecidos/limitações com migrações online do PostgreSQL para o Banco de Dados 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 saber mais, confira Versões do banco de dados PostgreSQL com suporte.

  • 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:

    • wal_level: defina 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.
  • Adicionar 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, há um comando, pg_dump, que é usado para levar 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 7500, 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 de 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 {database} 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 será imprevisível.
  • A atualização de um segmento de chave primária é ignorada. A aplicação de tal atualização será 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 nesta 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.