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, suportando uma variedade de ambientes de origem, garantindo uma transição sem complicações para a Base de Dados do Azure para PostgreSQL.
Este artigo descreve problemas conhecidos e limitações associadas a migrações online do PostgreSQL para o Banco de Dados do Azure para PostgreSQL usando o Serviço de Migração de Banco de Dados do Azure (DMS).
Configuração de migrações online
As versões de origem mais baixas do PostgreSQL suportadas são 9.4 e a versão de destino mais alta suportada é a 14.9.
Só são suportadas migrações para a mesma versão ou para uma versão superior. Por exemplo, a migração do PostgreSQL 9.5 para a Base de Dados do Azure para PostgreSQL 9.6 ou 10 é suportada. No entanto, a migração do PostgreSQL 11 para o PostgreSQL 9.6 não é suportada.
Para habilitar a replicação lógica no arquivo PostgreSQL
postgresql.conf
de origem, defina os seguintes parâmetros:Parâmetro Description 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 desejar migrar quatro bancos de dados, defina o valor como pelo menos 4
.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 ao PostgreSQL
pg_hba.conf
de origem.Anote o endereço IP do DMS depois de concluir o aprovisionamento de uma instância do Azure Database Migration Service.
Adicione o endereço IP ao
pg_hba.conf
ficheiro:host all 172.16.136.18/10 md5 host replication postgres 172.16.136.18/10 md5
O utilizador tem de ter a função REPLICATION no servidor que aloja a base de dados de origem.
Os esquemas da base de dados de origem e de destino têm de corresponder.
Limitações de tamanho
- Pode migrar até 1 TB de dados do PostgreSQL para a Base de Dados do Azure para PostgreSQL através de um único serviço do DMS.
- O DMS permite que os usuários escolham tabelas dentro de um banco de dados que desejam migrar.
Nos bastidores, o pg_dump
comando 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 pg_dump
comando após a -t
opção ou -T
. O comando pg_dump
utiliza a contagem de carateres para tabelas selecionadas ou não selecionadas, conforme a que for mais baixa. Se a contagem de caracteres para as tabelas selecionadas e não selecionadas exceder 7500, o pg_dump
comando falhará com um erro.
Para o exemplo anterior, o pg_dump
comando 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, -T
espaços e barras)
Limitações do tipo de dados
Limitação: se não existir uma chave primária nas tabelas, as alterações poderão não ser sincronizadas com a base de dados de destino.
Solução: defina temporariamente uma chave primária para a tabela para a migração continuar. Remova a chave primária após a conclusão da migração de dados.
Limitações da migração online do RDS PostgreSQL do AWS
Ao tentar efetuar uma migração online da Base de Dados Relacional (RDS) PostgreSQL do Amazon Web Service (AWS) para a Base de Dados do Azure para PostgreSQL, 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 de 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 coluna difere 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 obter mais informações sobre como migrar o esquema, veja a documentação de migração online da Base de Dados do Azure para PostgreSQL.
Erro: O banco de dados de destino '{database}' tem tabelas '{number of tables}' enquanto o banco de dados de origem '{database}' tem tabelas '{number of tables}'. O número de tabelas nas bases de dados de origem e de destino deve coincidir.
Limitação: Este 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 na origem. Para obter mais informações sobre como migrar o esquema, veja a documentação de migração online da Base 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. Provavelmente selecionou a base de dados errada 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. Migrar o esquema.
Limitação: Este erro ocorre quando não há nenhum esquema no banco de dados de destino. Confirme que o esquema no destino corresponde ao esquema na origem.
Solução alternativa: verifique se o esquema no destino corresponde ao esquema na origem. Para obter mais informações sobre como migrar o esquema, veja a documentação de migração online da Base de Dados do Azure para PostgreSQL.
Outras limitações
O nome do banco de dados não pode incluir ponto-e-vírgula (
;
).Uma tabela capturada tem de ter uma chave primária. Se uma tabela não tiver uma chave primária, o resultado das operações de registro DELETE e UPDATE será imprevisível.
A atualização de um segmento da chave primária é ignorada. A aplicação dessa atualização é identificada pelo destino como uma atualização que não atualizou nenhuma linha. O resultado é um registo escrito na tabela de exceções.
Se a tabela tiver uma
JSON
coluna, qualquer operação DELETE ou UPDATE nessa tabela poderá levar a uma migração com falha.A migração de várias tabelas com o mesmo nome, mas com capitalização diferente, pode causar um comportamento imprevisível e não é suportada. Um exemplo é a utilização de table1, TABLE1 e Table1.
Alterar o processamento de [ CREATE | ALTER - Brasil | QUEDA | TRUNCATE ] tabela DDLs não é suportada.
No Database Migration Service, uma única atividade de migração só pode acomodar até quatro bases de dados.
A migração da tabela pg_largeobject não é suportada.