Gerar migrations a partir de um dump do PostgreSQL
TLDR: Ler um dump do PostgreSQL e gerar migrations do ActiveRecord organizadas, separadas em tabelas, índices e constraints.
Contexto
O banco de leads já existe e seu schema está descrito num dump do PostgreSQL. Em vez de uma única migration com tudo dentro, o objetivo é gerar migrations limpas e organizadas seguindo as convenções do ActiveRecord — uma migration por tabela, depois os índices, e por fim as constraints (chaves estrangeiras e checks).
Abordagem
As migrations são divididas nesta ordem:
- Tabelas — uma migration por tabela, com colunas nos tipos corretos, defaults e restrições de nulidade
- Índices — agrupados logicamente (uma migration por tabela, ou uma única global se o volume for pequeno)
- Constraints — chaves estrangeiras e check constraints numa migration final, que depende de todas as tabelas já existirem
Objetivos
- Gerar uma migration por tabela (
create_<table>) - Gerar uma migration de índices separada por domínio/grupo
- Gerar uma migration de constraints (chaves estrangeiras e check constraints)
- Seguir as convenções do ActiveRecord 8.0 (reversível, método
change) - Usar o padrão de nomes de
make leads.migration.create, com timestamps corretos
Fora de escopo
— (não registrado na spec original)
Mudanças
leads/db/migrate/TIMESTAMP_create_<table>.rb— um arquivo por tabelaleads/db/migrate/TIMESTAMP_add_indexes_to_<table>.rb— migrations de índice por tabelaleads/db/migrate/TIMESTAMP_add_constraints.rb— chaves estrangeiras e check constraints
Pré-requisitos
- É preciso ter o arquivo de dump (
.sql) — colocado emleads/db/ou compartilhado diretamente - O dump deve ser saída em texto puro de
pg_dump --schema-only(não o formato binário)
Como verificar
bash
make leads.db.create
make leads.db.migrate
# o schema resultante deve bater com o dump original
Documentação
— (não registrado na spec original)