Datenbankmigrationen in Go (Golang): Vollständiger Leitfaden zu Tools

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Datenbankmigrationen in Go (Golang): So verwalten Sie Ihr Datenschema

\n\n

Bei der Entwicklung von Anwendungen in Go stellt sich früher oder später die Notwendigkeit, die Datenbankstruktur zu ändern: neue Tabellen hinzufügen, bestehende Spalten ändern, Indizes erstellen. Die manuelle Ausführung von SQL-Skripten in verschiedenen Umgebungen (lokale Entwicklungsumgebung, Staging, Produktion) führt zu Fehlern und Synchronisationsproblemen. Die Lösung sind Datenbankmigrationen (database migrations).

\n\n

Im Go-Ökosystem gibt es mehrere ausgereifte Bibliotheken zur Verwaltung von Migrationen. In diesem Artikel werden wir die drei beliebtesten Tools im Detail besprechen: golang-migrate/migrate, pressly/goose und rubenv/sql-migrate. Sie erfahren, wie Sie jedes davon installieren, konfigurieren und verwenden, und lernen die besten Praktiken kennen.

\n\n

Was sind Migrationen und warum werden sie benötigt?

\n\n

Eine Migration ist eine Datei (oder eine Reihe von Dateien), die SQL-Befehle zum Ändern des Datenbankschemas enthält. Jede Migration hat eine eindeutige Kennung (normalerweise einen Zeitstempel oder eine Nummer) und zwei Richtungen: up (Anwenden der Änderungen) und down (Rückgängigmachen der Änderungen).

\n\n

Die Hauptvorteile der Verwendung von Migrationen:

\n
    \n
  • Schematische Versionierung – der Änderungsverlauf wird zusammen mit dem Code im Repository gespeichert.
  • \n
  • Reproduzierbarkeit – identische Änderungen in allen Umgebungen.
  • \n
  • Rückgängigmachen von Änderungen – die Möglichkeit, schnell zur vorherigen Schema-Version zurückzukehren.
  • \n
  • Teamarbeit – Entwickler überschreiben nicht gegenseitig ihre Änderungen.
  • \n
\n\n

1. golang-migrate/migrate

\n\n

Die beliebteste Bibliothek für Migrationen in Go. Unterstützt PostgreSQL, MySQL, SQLite, MongoDB und viele andere Datenbanken.

\n\n

Installation

\n
go get -u github.com/golang-migrate/migrate/v4\ngo install -tags 'postgres' github.com/golang-migrate/migrate/v4/cmd/migrate@latest
\n\n

Struktur der Migrationen

\n

Erstellen Sie einen Ordner migrations und fügen Sie Dateien mit einem Präfix im Format {timestamp}_{title}.{direction}.sql hinzu:

\n
migrations/\n  000001_create_users_table.up.sql\n  000001_create_users_table.down.sql\n  000002_add_email_column.up.sql\n  000002_add_email_column.down.sql
\n\n

Beispiel einer Migration (up)

\n
-- 000001_create_users_table.up.sql\nCREATE TABLE users (\n    id SERIAL PRIMARY KEY,\n    name VARCHAR(100) NOT NULL,\n    created_at TIMESTAMP DEFAULT NOW()\n);
\n\n

Beispiel einer Migration (down)

\n
-- 000001_create_users_table.down.sql\nDROP TABLE IF EXISTS users;
\n\n

Anwenden von Migrationen aus Go-Code

\n
package main\n\nimport (\n    "github.com/golang-migrate/migrate/v4"\n    _ "github.com/golang-migrate/migrate/v4/database/postgres"\n    _ "github.com/golang-migrate/migrate/v4/source/file"\n)\n\nfunc main() {\n    m, err := migrate.New(\n        "file://migrations",\n        "postgres://localhost:5432/mydb?sslmode=disable")\n    if err != nil {\n        panic(err)\n    }\n    if err := m.Up(); err != nil && err != migrate.ErrNoChange {\n        panic(err)\n    }\n}
\n\n

2. pressly/goose

\n\n

Goose ist ein leichtes und schnelles Tool, das auch das Schreiben von Migrationen in Go (nicht nur in SQL) unterstützt. Ideal für Projekte, die Logik auf Codeebene erfordern.

\n\n

Installation

\n
go get github.com/pressly/goose/v3/cmd/goose
\n\n

Erstellen einer Migration

\n
goose create create_users_table sql
\n\n

Es wird eine Datei namens 20250101120000_create_users_table.sql erstellt. Inhalt:

\n
-- +goose Up\nCREATE TABLE users (\n    id SERIAL PRIMARY KEY,\n    name VARCHAR(100) NOT NULL\n);\n\n-- +goose Down\nDROP TABLE IF EXISTS users;
\n\n

Go-Migrationen (fortgeschrittene Variante)

\n

Goose ermöglicht das Schreiben von Migrati

Empfehlungen