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.
Anote o endereço IP do DMS após concluir o provisionamento de uma instância do DMS.
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.
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.