PlanetScale lança Heroku Migrator para migrar bancos de vários terabytes do Heroku sem logical replication
Aprofundamento CEVIU
Aprofundamento
A PlanetScale atacou um problema específico: os planos padrão do Heroku Postgres não oferecem acesso ao WAL nem logical replication. Segundo a empresa, a replicação lógica só chegou ao Heroku Postgres Advanced em outubro de 2026, o que não ajuda quem está nos planos padrão (e exigiria uma migração extra para o tier Advanced). Sem slot de replicação, o caminho online restante é a replicação baseada em triggers, e é isso que o Heroku Migrator faz, usando o Bucardo. Ele instala triggers bucardo_delta em cada tabela de origem, registra inserts, updates e deletes em tabelas de delta e track, faz um COPY único e depois aplica os deltas no destino.
O ganho de velocidade vem da divisão em duas fases. Antes do COPY, o migrator derruba índices secundários e únicos no destino, mantendo as chaves primárias, que o Bucardo precisa para aplicar mudanças. Depois da cópia, pausa a replicação e reconstrói os índices com workers paralelos (maintenance_work_mem de 1GB e 2 workers paralelos de manutenção). Num caso relatado, a cópia saltou de cerca de 60 GB/h para quase 300 GB/h, a reconstrução levou cerca de 2 horas e o processo todo ficou umas 2,5 vezes mais rápido. A empresa também ajustou transaction_timeout=0 nas conexões do Bucardo e configurou TCP keepalives para que conexões derrubadas virem erro em cerca de um minuto, não travamento. Restrições: toda tabela replicada precisa de chave primária ou índice único, e o schema fica congelado durante a migração. Para bases a partir de 500 GB, a recomendação é rodar o migrator numa instância EC2 de alto desempenho.
Por que isso importa
Para quem opera banco no Heroku e não pode ter horas de downtime, a ferramenta tira a necessidade de produto de terceiros ou de subir de tier só para ter logical replication. Na prática, o trabalho pesado vira planejamento: achar tabelas sem chave primária, congelar DDL (inclusive auto-migrations do framework e manutenção do pg_partman) e dimensionar onde o migrator roda. É uma leitura editorial, mas o uso de triggers tende a exigir mais atenção operacional que replicação via WAL, então vale ensaiar o cutover e usar a etapa de verificação.
Perguntas frequentes
Por que o Heroku Migrator usa triggers em vez de logical replication?
Porque os planos padrão do Heroku Postgres não dão acesso ao WAL nem a logical replication. Triggers são o único mecanismo de captura de mudanças disponível nesses planos. O Bucardo registra as alterações e as reaplica no PlanetScale.
Quais são os requisitos para migrar com a ferramenta?
Toda tabela replicada precisa de chave primária ou índice único, senão o Bucardo não identifica a linha a atualizar no destino. Também é preciso congelar mudanças de schema durante a migração. A ferramenta de discovery e o Liftoff ajudam a achar esses problemas antes.
Onde devo rodar o migrator em bancos grandes?
Bancos pequenos e médios podem rodar no próprio Heroku, num dyno (Performance-L para mais de 100 GB). A partir de 500 GB, a recomendação é uma instância EC2 de alto desempenho. Como o Heroku reinicia dynos ao menos uma vez a cada 24 horas, cópias longas ficam mais seguras fora dele.
Como a divisão em duas fases acelera a cópia?
Sem índices secundários e únicos no destino, o COPY escreve bem mais rápido. Depois, os índices são reconstruídos em paralelo. Num caso citado pela PlanetScale, a cópia foi de cerca de 60 GB/h para quase 300 GB/h.
Fontes
- planetscale.comfonte original
- Categoria
- CEVIU DevOps
- Publicado
- 13 de novembro de 2026
- Editoria
- CEVIU DevOps

