Documentation ¶
Overview ¶
Package migrate provides simple migration functions Up, Down, and To, as well as a Migrator. Up, Down, and To are one-liner convenience functions that use default Options. If you need custom Options, use New.
Example ¶
package main import ( "context" "database/sql" "os" _ "github.com/go-sql-driver/mysql" _ "github.com/jackc/pgx/v4/stdlib" "github.com/maragudk/migrate" _ "github.com/mattn/go-sqlite3" ) var migrations = os.DirFS("testdata/example") func main() { db, err := sql.Open("sqlite3", "db.sqlite") if err != nil { panic(err) } if err := migrate.Up(context.Background(), db, migrations); err != nil { panic(err) } if err := migrate.Down(context.Background(), db, migrations); err != nil { panic(err) } if err := migrate.To(context.Background(), db, migrations, "1"); err != nil { panic(err) } }
Output:
Example (Advanced) ¶
package main import ( "context" "database/sql" "os" _ "github.com/go-sql-driver/mysql" _ "github.com/jackc/pgx/v4/stdlib" "github.com/maragudk/migrate" _ "github.com/mattn/go-sqlite3" ) var migrations = os.DirFS("testdata/example") func main() { db, err := sql.Open("sqlite3", "db.sqlite") if err != nil { panic(err) } before := func(ctx context.Context, tx *sql.Tx, version string) error { // Do whatever you need to before each migration return nil } after := func(ctx context.Context, tx *sql.Tx, version string) error { // Do whatever you need to after each migration return nil } m := migrate.New(migrate.Options{ After: after, Before: before, DB: db, FS: migrations, Table: "migrations2", }) if err := m.MigrateUp(context.Background()); err != nil { panic(err) } if err := m.MigrateDown(context.Background()); err != nil { panic(err) } if err := m.MigrateTo(context.Background(), "1"); err != nil { panic(err) } }
Output:
Example (Embed) ¶
package main import ( "context" "database/sql" "embed" "io/fs" _ "github.com/go-sql-driver/mysql" _ "github.com/jackc/pgx/v4/stdlib" "github.com/maragudk/migrate" _ "github.com/mattn/go-sqlite3" ) //go:embed testdata/example var embeddedMigrations embed.FS func main() { db, err := sql.Open("sqlite3", "db.sqlite") if err != nil { panic(err) } // Because migrate always reads from the root of the provided file system, // use fs.Sub to return the subtree rooted at the provided dir. fsys, err := fs.Sub(embeddedMigrations, "testdata/example") if err != nil { panic(err) } if err := migrate.Up(context.Background(), db, fsys); err != nil { panic(err) } if err := migrate.Down(context.Background(), db, fsys); err != nil { panic(err) } if err := migrate.To(context.Background(), db, fsys, "1"); err != nil { panic(err) } }
Output:
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type Migrator ¶
type Migrator struct {
// contains filtered or unexported fields
}
func New ¶
New Migrator with Options. If Options.Table is not set, defaults to "migrations". The table name must match ^[\w.]+$ . New panics on illegal options.
func (*Migrator) MigrateDown ¶
MigrateDown from the current version.
Click to show internal directories.
Click to hide internal directories.