migrate en Go: guía completa con ejemplos prácticos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

migrate en Go: guía completa con ejemplos prácticos

La librería migrate es una herramienta potente y flexible para gestionar migraciones de bases de datos en el ecosistema Go. Permite a los desarrolladores versionar los cambios en el esquema de la base de datos, aplicar y revertir migraciones de forma automática, e integrarse con diversos sistemas de gestión de bases de datos, incluyendo PostgreSQL, MySQL, SQLite, MongoDB, CockroachDB y más. En este artículo, exploraremos en detalle cómo usar migrate en Go, desde la instalación hasta técnicas avanzadas.

¿Qué es y por qué es necesaria?

Durante el desarrollo de cualquier aplicación que interactúe con una base de datos, tarde o temprano surge la necesidad de modificar la estructura de las tablas: agregar una nueva columna, crear un índice, cambiar un tipo de dato o renombrar una tabla. Si trabajas en equipo o despliegas la aplicación en múltiples entornos (desarrollo, staging, producción), ejecutar scripts SQL manualmente se convierte en una fuente de errores e inconsistencias.

La librería migrate resuelve este problema proporcionando una forma simple y declarativa de describir los cambios en el esquema. Cada migración es un par de archivos: uno para aplicar los cambios (up) y otro para revertirlos (down). La librería lleva un registro de qué migraciones ya se han aplicado, permitiendo avanzar o retroceder de forma segura en el historial de cambios.

Principales ventajas de usar migrate:

  • Versionado: cada migración tiene un número único o una marca de tiempo, lo que permite saber exactamente qué versión del esquema se está utilizando.
  • Reproducibilidad: puedes reconstruir la base de datos desde cero aplicando todas las migraciones en orden.
  • Seguridad: las migraciones down permiten revertir los cambios en caso de error.
  • Independencia del lenguaje: las migraciones se escriben en SQL puro, lo que las hace portables entre proyectos en diferentes lenguajes.

Instalación

Para instalar la librería migrate en Go, usa el comando estándar go get. Se recomienda instalarla como dependencia de tu proyecto:

go get -u github.com/golang-migrate/migrate/v4

También necesitarás instalar el driver para tu base de datos. Por ejemplo, para PostgreSQL:

go get -u github.com/golang-migrate/migrate/v4/database/postgres

Para MySQL:

go get -u github.com/golang-migrate/migrate/v4/database/mysql

Para SQLite:

go get -u github.com/golang-migrate/migrate/v4/database/sqlite3

Además, necesitarás un driver para la fuente de migraciones. El más común es el sistema de archivos:

go get -u github.com/golang-migrate/migrate/v4/source/file

También están disponibles drivers para io/fs, github, gitlab, s3 y otras fuentes.

Inicio rápido — ejemplo mínimo funcional

Vamos a crear una aplicación simple que se conecte a una base de datos SQLite y aplique migraciones.

Primero, crea la estructura de carpetas para las migraciones:

mkdir -p migrations
cd migrations

Crea la primera migración. El nombre del archivo debe seguir el patrón: {versión}_{nombre}.{dirección}.sql. La versión suele ser un timestamp o un número secuencial.

Archivo: migrations/000001_create_users_table.up.sql

CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    email TEXT NOT NULL UNIQUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Archivo: migrations/000001_create_users_table.down.sql

DR                    

Recommendations