Migrations: gh-ost
O curso trata de migrações de esquema em tabelas grandes e durante deploys. Ele mostra quais migrações no Postgres só mexem no catálogo e quais reescrevem ou varrem a tabela sob um lock ACCESS EXCLUSIVE. Explica como o gh-ost copia linhas para uma tabela sombra enquanto lê o log binário do MySQL, e compara as ferramentas pg_repack, pg-osc e pgroll. Também aborda a janela de deploy com código antigo e novo no mesmo esquema, expandir e contrair, preenchimentos em lotes, lock_timeout e uma revisão desta aplicação.
O que você vai aprender
- ✓Quais migrações no Postgres são instantâneas e quais reescrevem ou varrem a tabela
- ✓Como o gh-ost usa tabela sombra, cópia em lotes e o log binário
- ✓Recursos nativos do Postgres: CREATE INDEX CONCURRENTLY, restrições NOT VALID e lock_timeout
- ✓O que fazem o pg_repack, o pg-osc e o pgroll e como capturam mudanças
- ✓Expandir e contrair para mudanças que quebram o código em produção
- ✓Preenchimentos em lotes com in_batches, rodados num job e fora da migração
A migração que trava a tabela
A maioria das migrações é instantânea, e é por isso que as que não são pegam de surpresa. O que decide isso não é o tamanho da tabela. É se o banco precisa reescrevê-la.
Ler a aula completa grátis →Currículo
7 aulasA migração que trava a tabela
Quais migrações só mexem no catálogo, quais reescrevem a tabela e por que o lock ACCESS EXCLUSIVE causa quedas.
Como o gh-ost funciona
Como o gh-ost cria uma tabela sombra, copia em lotes, lê o log binário e troca os nomes.
As ferramentas do Postgres
Recursos nativos do Postgres para migrações seguras e o que fazem o pg_repack, o pg-osc e o pgroll.
O deploy é a parte difícil
Por que código antigo e novo dividem o mesmo esquema durante o deploy e como expandir e contrair resolve isso.
Preenchendo sem lock
Como preencher uma coluna nova em lotes curtos, fora das migrações, e adicionar NOT NULL sem lock longo.
O que esta aplicação faz hoje
Uma revisão das migrações desta aplicação, do novo lock_timeout de cinco segundos e do risco de renomear colunas.
Juntando tudo
Separar migrações lentas das que quebram o código, com um desafio de classificar mudanças usando migration_plan.