Goose: Ein Datenbankmigrationstool für Go
Takashi Yamamoto
Infrastructure Engineer · Leapcell

Key Takeaways
- Goose vereinfacht Datenbankmigrationen mit Unterstützung für SQL- und Go-basierte Migrationen.
- Es unterstützt mehrere Datenbanken und ermöglicht das Einbetten von Migrationen in Go-Binärdateien.
- Bietet essentielle Migrationsbefehle wie
up
,down
,status
undversion
.
Goose ist ein Datenbankmigrationstool, das entwickelt wurde, um die Verwaltung Ihres Datenbankschemas durch die Erstellung inkrementeller SQL-Änderungen oder Go-Funktionen zu vereinfachen. Es bietet sowohl eine Befehlszeilenschnittstelle (CLI) als auch eine Bibliothek, was es vielseitig für verschiedene Anwendungsfälle macht.
Funktionen
-
Multi-Datenbank-Unterstützung: Goose funktioniert mit verschiedenen Datenbanken, darunter Postgres, MySQL, SQLite, YDB, ClickHouse, MSSQL, Vertica und mehr.
-
Go-Migrationen: Unterstützt Migrationen, die als einfache Go-Funktionen geschrieben wurden, was komplexe Migrationen ermöglicht, die nicht allein in SQL ausgedrückt werden können.
-
Eingebettete Migrationen: Ermöglicht das Einbetten von Migrationen in Ihre Go-Binärdateien, was die Verteilung und Bereitstellung erleichtert.
-
Out-of-Order-Migrationen: Unterstützt das Anwenden von Migrationen, die verpasst oder in falscher Reihenfolge angewendet wurden.
-
Seeding Data: Ermöglicht das Seeding von anfänglichen oder Testdaten in die Datenbank.
-
Umgebungsvariablen-Substitution: Ermöglicht die Verwendung von Umgebungsvariablen in SQL-Migrationen für dynamische Konfigurationen.
Installation
Um die Goose-CLI zu installieren, führen Sie Folgendes aus:
go install github.com/pressly/goose/v3/cmd/goose@latest
Dieser Befehl installiert die goose
-Binärdatei in Ihrem $GOPATH/bin
-Verzeichnis.
Für macOS-Benutzer ist Goose auch als Homebrew-Formel verfügbar:
brew install goose
Wenn Sie eine kleinere Binärdatei benötigen, können Sie eine Lite-Version erstellen, indem Sie unnötige Treiber ausschließen:
go build -tags='no_postgres no_mysql no_sqlite3 no_ydb' -o goose ./cmd/goose
Verfügbare Build-Tags sind: no_clickhouse
, no_libsql
, no_mssql
, no_mysql
, no_postgres
, no_sqlite3
, no_vertica
und no_ydb
.
Verwendung
Goose bietet verschiedene Befehle zur Verwaltung Ihres Datenbankschemas:
-
Erstellen einer neuen Migration:
Um eine neue SQL-Migration zu erstellen:
goose create AddSomeColumns sql
Dieser Befehl generiert eine neue SQL-Migrationsdatei mit einem mit einem Zeitstempel versehenen Präfix.
Um eine neue Go-Migration zu erstellen:
goose create AddSomeColumns go
Dieser Befehl generiert eine neue Go-Migrationsdatei mit dem entsprechenden Boilerplate-Code.
-
Anwenden von Migrationen:
Um die Datenbank auf die neueste verfügbare Version zu migrieren:
goose up
Dieser Befehl wendet alle verfügbaren Migrationen an.
-
Rollback von Migrationen:
Um eine einzelne Migration von der aktuellen Version zurückzusetzen:
goose down
Dieser Befehl führt ein Rollback der zuletzt angewendeten Migration durch.
-
Migrationsstatus:
Um den Status aller Migrationen auszugeben:
goose status
Dieser Befehl zeigt an, welche Migrationen angewendet wurden und welche ausstehen.
-
Aktuelle Version:
Um die aktuelle Version der Datenbank auszugeben:
goose version
Dieser Befehl gibt die aktuelle Migrationsversion der Datenbank aus.
Schreiben von Migrationen
Goose unterstützt Migrationen, die in SQL oder Go geschrieben sind.
-
SQL-Migrationen:
Eine Beispiel-SQL-Migration sieht wie folgt aus:
-- +goose Up CREATE TABLE post ( id INT NOT NULL, title TEXT, body TEXT, PRIMARY KEY(id) ); -- +goose Down DROP TABLE post;
Die Annotationen -- +goose Up
und -- +goose Down
kennzeichnen die Anweisungen, die für das Migrieren nach oben bzw. unten ausgeführt werden sollen.
-
Go-Migrationen:
Eine Beispiel-Go-Migration sieht wie folgt aus:
package main import ( "database/sql" "fmt" ) func Up_20130106222315(txn *sql.Tx) { fmt.Println("Hallo von Migration 20130106222315 Up!") } func Down_20130106222315(txn *sql.Tx) { fmt.Println("Hallo von Migration 20130106222315 Down!") }
Die Funktionen Up_20130106222315
und Down_20130106222315
definieren das Verhalten der Migration für das Anwenden und Zurücksetzen.
Fazit
Goose ist ein leistungsstarkes und flexibles Tool für die Verwaltung von Datenbankmigrationen in Go-Anwendungen. Die Unterstützung für mehrere Datenbanken, sowohl SQL- als auch Go-Migrationen, und Funktionen wie eingebettete Migrationen und Out-of-Order-Migrationen machen es zu einem wertvollen Werkzeug für Entwickler, die ihre Datenbankschemata effektiv verwalten und weiterentwickeln möchten.
Für detailliertere Informationen und erweiterte Konfigurationen lesen Sie das Goose GitHub-Repository und die offizielle Dokumentation.
FAQs
Goose funktioniert mit Postgres, MySQL, SQLite, MSSQL, ClickHouse, YDB und mehr.
Verwenden Sie den Befehl goose create <MigrationName> sql
, um eine Migrationsdatei zu generieren.
Ja, Goose unterstützt Migrationen, die in Go-Funktionen für komplexe Änderungen geschrieben wurden.
Wir sind Leapcell, Ihre erste Wahl für das Hosten von Go-Projekten.
Leapcell ist die Serverless-Plattform der nächsten Generation für Webhosting, asynchrone Aufgaben und Redis:
Multi-Sprachen-Unterstützung
- Entwickeln Sie mit Node.js, Python, Go oder Rust.
Stellen Sie unbegrenzt viele Projekte kostenlos bereit
- zahlen Sie nur für die Nutzung - keine Anfragen, keine Gebühren.
Unschlagbare Kosteneffizienz
- Pay-as-you-go ohne Leerlaufgebühren.
- Beispiel: 25 US-Dollar unterstützen 6,94 Millionen Anfragen bei einer durchschnittlichen Antwortzeit von 60 ms.
Optimierte Entwicklererfahrung
- Intuitive Benutzeroberfläche für mühelose Einrichtung.
- Vollständig automatisierte CI/CD-Pipelines und GitOps-Integration.
- Echtzeitmetriken und -protokollierung für umsetzbare Erkenntnisse.
Mühelose Skalierbarkeit und hohe Leistung
- Automatische Skalierung zur einfachen Bewältigung hoher Parallelität.
- Kein Betriebsaufwand - konzentrieren Sie sich einfach auf das Bauen.
Erfahren Sie mehr in der Dokumentation!
Folgen Sie uns auf X: @LeapcellHQ