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)
}
}
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)
}
}
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)
}
}
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.