migrate Go : guide complet avec exemples
La bibliothèque migrate est un outil puissant et flexible pour gérer les migrations de bases de données dans l'écosystème Go. Elle permet aux développeurs de versionner les modifications du schéma de base de données, d'appliquer et d'annuler automatiquement les migrations, et de s'intégrer avec divers SGBD, notamment PostgreSQL, MySQL, SQLite, MongoDB, CockroachDB et bien d'autres. Dans cet article, nous allons explorer en détail comment utiliser migrate en Go, de l'installation aux techniques avancées.
Qu'est-ce que c'est et pourquoi l'utiliser ?
Lors du développement d'une application interagissant avec une base de données, il est fréquent de devoir modifier la structure des tables : ajouter une colonne, créer un index, changer un type de données ou renommer une table. Si vous travaillez en équipe ou déployez l'application sur plusieurs environnements (développement, staging, production), l'exécution manuelle de scripts SQL devient source d'erreurs et d'incohérences.
La bibliothèque migrate résout ce problème en offrant une manière simple et déclarative de décrire les modifications de schéma. Chaque migration est une paire de fichiers : l'un pour appliquer les changements (up), l'autre pour les annuler (down). La bibliothèque suit les migrations déjà appliquées et permet de naviguer en toute sécurité dans l'historique des modifications.
Les principaux avantages de l'utilisation de migrate :
- Versionnage : chaque migration possède un numéro unique ou un horodatage, permettant de connaître précisément la version du schéma utilisée.
- Reproductibilité : vous pouvez déployer une base de données depuis zéro en appliquant toutes les migrations séquentiellement.
- Sécurité : les migrations down permettent d'annuler les modifications en cas d'erreur.
- Indépendance du langage : les migrations sont écrites en SQL pur, ce qui les rend portables entre projets dans différents langages.
Installation
Pour installer la bibliothèque migrate en Go, utilisez la commande standard go get. Il est recommandé de l'ajouter comme dépendance de votre projet :
go get -u github.com/golang-migrate/migrate/v4
Vous aurez également besoin d'installer le pilote pour votre base de données. Par exemple, pour PostgreSQL :
go get -u github.com/golang-migrate/migrate/v4/database/postgres
Pour MySQL :
go get -u github.com/golang-migrate/migrate/v4/database/mysql
Pour SQLite :
go get -u github.com/golang-migrate/migrate/v4/database/sqlite3
De plus, vous aurez besoin d'un pilote pour la source des migrations. Le système de fichiers est le plus couramment utilisé :
go get -u github.com/golang-migrate/migrate/v4/source/file
Des pilotes sont également disponibles pour io/fs, github, gitlab, s3 et d'autres sources.
Démarrage rapide — exemple minimal fonctionnel
Créons une application simple qui se connecte à une base de données SQLite et applique des migrations.
Commencez par créer la structure de dossiers pour les migrations :
mkdir -p migrations
cd migrations
Créez votre première migration. Le nom du fichier doit suivre le modèle : {version}_{nom}.{direction}.sql. La version est généralement un timestamp ou un numéro séquentiel.
Fichier : 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
);
Fichier : migrations/000001_create_users_table.down.sql
DR Aussi dans la bibliothèque
Travailler avec Excel en Rust : bibliothèques et exemples de code
Event Bus et le pattern Observer en C# (.NET) : implémentation et exemples
Range-v3 C++ : guide complet avec exemples pratiques
Configuration des applications Swift (iOS/macOS) : bonnes pratiques et outils