Migrações de banco de dados em Node.js: Visão geral de ferramentas e exemplos

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 JavaScript (Node.js): Ferramentas e prática



O desenvolvimento de aplicações web modernas em Node.js raramente ocorre sem trabalhar com bancos de dados. À medida que o projeto cresce, a estrutura das tabelas, índices e relacionamentos inevitavelmente mudam. A execução manual de scripts SQL no servidor é um caminho para o caos e erros. A solução para este problema são as migrações de banco de dados (database migrations). Este é um mecanismo de versionamento de alterações de esquema que permite à equipe de desenvolvimento atualizar a estrutura do BD de forma síncrona e segura.



No ecossistema JavaScript, existem várias ferramentas maduras para trabalhar com migrações. Vamos considerar três abordagens principais usando bibliotecas populares como exemplo.



1. Knex.js — construtor de consultas universal



Knex.js não é apenas um construtor SQL, mas também uma ferramenta completa para migrações e seeding (preenchimento com dados de teste). Ele suporta PostgreSQL, MySQL, SQLite e outros SGBDs. A principal vantagem é que você escreve as migrações em JavaScript e o Knex as traduz para o dialeto do banco de dados específico.



Instalação e configuração

npm install knexnpm install pg  # para PostgreSQL


Criamos o arquivo de configuração knexfile.js:

module.exports = {  development: {    client: 'pg',    connection: {      host: 'localhost',      user: 'user',      password: 'pass',      database: 'mydb'    },    migrations: {      directory: './migrations'    }  }};


Criação e execução de migração

Vamos criar uma migração para a tabela de usuários:

npx knex migrate:make create_users_table


Na pasta migrations, aparecerá um arquivo com carimbo de data/hora. Editamos ele:

exports.up = function(knex) {  return knex.schema.createTable('users', (table) => {    table.increments('id').primary();    table.string('username', 100).notNullable().unique();    table.string('email').notNullable();    table.timestamps(true, true); // created_at e updated_at  });};

exports.down = function(knex) { return knex.schema.dropTableIfExists('users');};


Aplicamos a migração:

npx knex migrate:latest


Reverter a última migração:

npx knex migrate:rollback


O Knex também permite executar SQL puro dentro das migrações, se for necessária uma lógica específica.



2. Sequelize — ORM com sistema de migrações poderoso



Sequelize é um ORM popular para Node.js, suportando PostgreSQL, MySQL, MariaDB, SQLite e MSSQL. Sua CLI fornece comandos convenientes para gerar e gerenciar migrações, intimamente integradas com os modelos.



Primeiros passos

npm install sequelize sequelize-cli pgnpx sequelize-cli init


Criamos um modelo e uma migração com um único comando:

npx sequelize-cli model:generate --name User --attributes username:string,email:string


Isso gera dois arquivos: o modelo models/user.js e uma migração em migrations/. Exemplo de migração:

'use strict';module.exports = {  up: async (queryInterface, Sequelize) => {    await queryInterface.createTable('Users', {      id: {        allowNull: false,        autoIncrement: true,        primaryKey: true,        type: Sequelize.INTEGER      },      username: {        type: Sequelize.STRING(100),        allowNull: false,        unique: true      },      email: {        type: Sequelize.STRING,        allowNull: false      },      createdAt: {        allowNull: false,        type: Sequelize.DATE      },      updatedAt: {        allowNull: false,        type: Sequelize.DATE      }    });  },  down: async (queryInterface, Sequelize) => {    await queryInterface.dropTable('Users');  }};


Aplicação e reversão:

npx sequelize-cli db:m                    

Recommendations