Migrações de banco de dados em Rust: Visão geral de ferramentas e bibliotecas
Ao desenvolver qualquer aplicação, mais cedo ou mais tarde surge a necessidade de alterar a estrutura do banco de dados. Adicionar novas colunas, criar índices ou renomear tabelas — tudo isso requer um gerenciamento cuidadoso das versões do esquema. No ecossistema Rust, existem várias soluções maduras para realizar migrações. Neste artigo, vamos explorar as principais abordagens e bibliotecas disponíveis para tarefas de gerenciamento de esquema de BD.
Por que as migrações são necessárias?
As migrações permitem:
- Versionar alterações — cada migração é um arquivo separado com um número de versão.
- Automatizar a implantação — aplicar e reverter alterações durante o deploy.
- Trabalhar em equipe — todos os desenvolvedores sincronizam o esquema localmente.
- Evitar erros — as migrações protegem contra alterações acidentais de dados.
Principais ferramentas para migrações em Rust
1. Diesel Migration (integrado ao Diesel ORM)
Diesel é o ORM mais popular para Rust. Ele fornece um mecanismo de migração integrado através da ferramenta CLI diesel_cli.
Principais recursos:
- Geração de arquivos de migração com consultas SQL.
- Suporte para PostgreSQL, MySQL, SQLite.
- Comandos:
migration generate,migration run,migration redo. - Rastreamento automático de migrações aplicadas.
Exemplo de criação e aplicação de migração:
# Instalação da CLIcargo install diesel_cli --no-default-features --features postgres
# Criando uma nova migraçãodiesel migration generate create_users
# Na pasta migrations/ aparecerão dois arquivos SQL:# up.sql — código para aplicar# down.sql — código para reverter
# Aplicando a migraçãodiesel migration runConteúdo do up.sql:
CREATE TABLE users ( id SERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, email VARCHAR(255) UNIQUE NOT NULL, created_at TIMESTAMP DEFAULT NOW());down.sql:
DROP TABLE IF EXISTS users;2. SQLx migrate (parte do ecossistema SQLx)
SQLx é um driver assíncrono para bancos de dados SQL. Seu subsistema de migrações funciona sem ORM, apenas com scripts SQL puros.
Características distintas:
- Suporte para PostgreSQL, MySQL, SQLite, MSSQL.
- Integração com CLI e execução programática a partir do código.
- Possibilidade de usar código Rust para verificações antes da migração.
- Verificação automática de integridade (hashes de arquivos).
Exemplo de execução programática de migrações em Rust:
use sqlx::migrate::Migrator;use sqlx::PgPool;
#[tokio::main]async fn main() -> Result<(), sqlx::Error> { let pool = PgPool::connect("postgres://user:pass@localhost/db").await?; // Especifica o caminho para a pasta de migrações let migrator = Migrator::new(std::path::Path::new("./migrations")).await?; // Executa todas as migrações não aplicadas migrator.run(&pool).await?; println!("Migrações executadas com sucesso!"); Ok(())}Estrutura da pasta migrations/:
migrations/├── 20231001_initial.sql├── 20231002_add_email_index.sql└── 20231003_create_roles.sqlCada arquivo contém SQL comum, por exemplo:
-- 20231001_initial.sqlCREATE TABLE IF NOT EXISTS users ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), username TEXT NOT NULL UNIQUE);3. SeaORM Migrator (parte do SeaORM)
SeaORM é um ORM assíncrono moderno que oferece seu próprio sistema de migrações, o SeaORM Migrator. Ele permite escrever migrações em Rust, em vez de SQL, o que d
Também na biblioteca
Configuração de aplicações TypeScript: bibliotecas e ferramentas
Serialização de objetos em Swift: Codable, NSCoding e JSONEncoder
Criterion para Rust: guia completo com exemplos práticos
Geração de relatórios PDF em Rust: bibliotecas e exemplos práticos