Migrações de banco de dados em Rust: Visão geral de ferramentas e bibliotecas

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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 run

Conteú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.sql

Cada 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

Recommendations